创建数据库
mysql> create database test;
显示所有数据库
mysql> show databases;
mysql> use test
删除数据库
mysql> drop database test1
创建表
1 |
|
删除表内容
1 |
|
显示所有表
1 |
|
显示当前表
1 |
|
如果当前没有使用表,则返回NUll
.
显示表详情
1 |
|
向表内添加内容
可以通过LOAD DATA
和INSERT
语句向新建的表内插入数据。
通过load data 添加数据
我们先按照自己的想法在txt文件中写入如下数据,命名为1.txt
.
1 |
|
导入student
表.
1 |
|
查询表内容
1 |
|
和我们想要的不一样。分析一下原因,上面我们的txt文件用的是空格隔开的,但其实应该用制表符隔开。
1 |
|
重新插入,查询。
1 |
|
不符合DATE格式的生日,自动变成了0000-00-00格式。如果值为NULL,则在txt文件中记录为\N
.
1 |
|
插入,查询。
1 |
|
总结: LOAD导入数据时,用制表符隔开关键字,用\N
表示NULL,用换行符隔开语句。
如果上面语句执行失败,可能是因为您安装的MySQL基于安全问题考虑,默认情况不启用本地文件功能。具体可查询 MySQL学习笔记(五)安全性/ LOAD DATA LOCAL
安全问题
通过INSERT
来插入数据
我们可以通过INSERT
关键字按照表的样式来插入单行数据,在SQL标准中应使用单引号,在MySQL中对SQL进行了扩展,允许使用单引号和双引号两种。
1 |
|
1 |
|
查询一下结果,均插入成功。
1 |
|
向表中添加字段
通过alter add
命令增加表的字段。
通常格式是alter table 表名 add 字段 类型 其他
例
1 |
|
如果不加说明会自动添加在最后一列的位置,如果希望添加在指定的一列,可以用
alter table 表名 add 字段 类型 after 已有列名
例如 alter table student add lesson varchar(20) after name
将会插入在name
后的位置。若想添加到第一列的话,则是alter table student add lesson varchar(20) first
。
删除字段
alter table 表名 drop field_name
例:
1 |
|
向表中添加主键
添加一个自动增长的id作为主键。
1 | mysql> alter table student add id int(10) auto_increment not null first, add pri |
删除自动增加
1 | mysql> alter table student change id id int(10); |
删除主键
要删除主键,先要删除自动增加,然后取消主键。1
mysql> alter table student drop primary key;
从表中筛选查询信息
通常的格式是
1 |
|
更新数据
1 |
|
选择特定的行
查询1998年7月23日之后出生的学生。
1 |
|
查询查询1998年7月23日之后出生的女学生。
1 |
|
逻辑运算符除了可以用AND
外还可以用OR
。例如,查询1998年7月23日之后出生的女学生或者是1998年7月23日之前出生的男学生的姓名,多个查询语句最好用()
分隔开。
1 |
|
将结果排序
ORDER
默认为升序,若要降序输出的话,添加DESC
关键字。
1 |
|
时间计算函数
TIMESTAMPDIFF()
函数可以计算两个时间的时间差,我们可以用as
来给输出的数据重命名一个标签,CURDATE()
函数表示现在的时间。
1 |
|
WHERE
用法,查找生日是7月,父母不为空的学生。
1 |
|
也可以通过简单的计算,根据现在的月份,来确定到某一指定的月份。
MONTH
函数可以返回1~12. 而MOD(something,12)
返回0-11.
现在当前是六月,我们分别用两种方法取出生日在12月和3月的小朋友。
1 |
|
例二:
1 |
|
模式匹配
LIKE
LIKE
的几个例子:
查询以W
开头的学生。
1 |
|
查询名字末尾是I
的学生。
1 |
|
查询名字中含有W
的学生。
1 |
|
查询名字有五个字母的学生。用五个下划线。
1 |
|
正则表达式
MySQL允许使用REGEXP
,RLIKE
运算符在SQL中匹配模式,否定形式为NOT REGEXP
,NOT RLIKE
。
正则表达式中一些常用通配符和对应操作。
通配符 | 行为 |
---|---|
^ | 匹配所搜索字符串的开头位置 |
$ | 匹配所搜索字符串的末尾位置 |
. | 匹配任何单个字符 |
[…] | 匹配方括号中的任何字符 |
... | 匹配非方括号中的任何字符 |
p1Ip2 | 匹配任何模式P1或P2 |
* | 匹配前面字符零次或多次 |
+ | 匹配前面字符一次或多次 |
{n} | 匹配前面字符的n个实例 |
{m,n} | 匹配从前面字符的m到n个实例 |
可以用破折号表示某一范围,例如REGEXP '[A-Z]'
匹配任何字母,REGEXP '[0-9]'
匹配任何数字。
例如,含有零个或多个W的字符。
1 |
|
含有一个或多个w的字符。
1 |
|
MySQL不区分大小写,如果查询结果要区分大小写,可以添加BINARY
关键字。
例:查询姓名以W开头的数据。
1 |
|
查询名字中含有W的数据。
1 |
|
查询名字是5个字母的数据。
1 |
|
也可以用:
1 |
|
计数
查询表内有多少行数据。
1 |
|
查询表内有多少男生,多少女生。
1 |
|
查询有多少叫LUCY
或LILEI
的同学。
1 |
|
如果没有group by
语句,会将所有结果视为一个组来处理,但是每个命名列是不明确的。
1 |
|
查询不重复的信息,可以使用关键字DISTINCT
。
1 |
|
多个表的应用
新建一个teacher
表
1 |
|
student
表为:
1 |
|
有时候为了得到完整的结果,我们需要从两个或多个表中获取结果。
使用表别名
Alias
关键字 , 使用一个列名别名。可以方便程序阅读和书写。
1 |
|
inner join
数据库中的表可以通过inner join
建立内联接,将彼此联系起来。例,使用on
子句根据课程来匹配两个表。
1 |
|
若要将表中的记录与同一表中的其他记录进行比较,inner join
也可以对自身进行内连接,比如查询一下学生表中选择同一课程的男生和女生。
1 |
|
[1]. 参考: https://dev.mysql.com/doc/refman/5.7/en/entering-queries.html