一、 概念
二、 数据类型
1、 数值数据类型
2、 日期和时间类型
3、 字符串类型
数据库">三、 数据库
四、 表
五、 SQL语言
1、 数据查询语言 DQL(Data Query Language)
2、 数据操纵语言DML(Data manipulation Language)
3、 数据定义语言 DDL(Data Define Language)
4、 数据控制语言 DCL(Data Control Language)
六、 SQL子句
七、 约束 Constraints
1、 NOT NULL
不允许、不接受空值
2、 UNIQUE 唯一约束
3、 PRIMARY KEY
PRIMARY KEY主键拥有自动定义的UNIQUE约束
主键,列或列集合唯一性
4、 FOREIGN KEY
语法:一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEY
1 | FOREIGN KEY (字段) REFERENCES 另一个表(主键); |
- 1
5、 CHECK
6、 DEFAULT
八、 索引
九、 ALTER语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
十、 视图
十一、日期和时间函数
1、 NOW()
返回当前的日期和时间
2016-10-12 15:13:38
2、 CURDATE()
返回当前的日期
2016-10-12
3、 CURTIME()
返回当前的时间
15:16:32
4、 DATE()
提取 日期或日期/时间表达式的 日期部分,如下图:
执行语句:
1 | SELECT DATE(start_date) FROM teacher; |
结果如下图:
5、 EXTRACT()
EXTRACT(Unit) 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
Unit 值如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH |
6、 DATE_ADD()
向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type值如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND DAY_MICROSECOND HOUR_MINUTE HOUR_SECOND HOUR_MICROSECOND MINUTE_SECOND MINUTE_MICROSECOND SECOND_MICROSECOND QUARTER MONTH MINUTE SECOND MICROSECOND HOUR WEEK YEAR |
举例:
现在,我们希望向 “OrderDate” 添加 2 天,这样就可以找到付款日期。
我们使用下面的 SELECT 语句:
1 2 | SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders |
- 12
7、 DATE_SUB()
DATE_SUB(date,INTERVAL expr type)
参数及用法同DATE_ADD()
从日期减去指定的时间间隔
8、 DATEDIFF()
DATEDIFF(date1,date2)
返回值有正负
返回两个日期之间的天数。
9、 DATE_FORMAT()
语法格式:
DATE_FORMAT(date,format)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %X 年,其中的星期日是周的第一天,4 位,与 %V 使用 %w 周的天 (0=星期日, 6=星期六) %Y 年,4 位 %y 年,2 位 %v 周 (01-53) 星期一是一周的第一天,与 %x 使用 %V 周 (01-53) 星期日是一周的第一天,与 %X 使用 %W 星期名 %u 周 (00-53) 星期一是一周的第一天 %U 周 (00-53) 星期日是一周的第一天 %T 时间, 24-小时 (hh:mm:ss) %s 秒(00-59) %S 秒(00-59) %r 时间,12-小时(hh:mm:ss AM 或 PM) %p AM 或 PM %m 月,数值(00-12) %l 小时 (1-12) %k 小时 (0-23) %j 年的天 (001-366) %i 分钟,数值(00-59) %I 小时 (01-12) %h 小时 (01-12) %H 小时 (00-23) %d 月的天,数值(00-31) %e 月的天,数值(0-31) %D 带有英文前缀的月中的天 %c 月,数值 %b 缩写月名 %f 微秒 %M 月名 %a 缩写星期名 |
十二、 函数
一般常用函数
语法格式:
SELECT function(列) FROM 表
1 2 3 4 5 6 7 | MIN(column) 返回某列的最低值(有则不会返回NULL,没有则返回NULL) MAX(column) 返回某列的最高值(没有则返回NULL) COUNT(DISTINCT column) 返回相异结果的数目 SUM(column) 返回某列的总和 COUNT(*) 返回被选行数 COUNT(column) 返回某列的行数(不包括 NULL 值) AVG(column) 返回某列的平均值 |
1、GROUP BY
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
常用于返回某月、某组的销售额、消费水平等等
1 2 | SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer |
2、 HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE子句中无法使用计函数。
1 2 3 | SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000 |
3、 UCASE()
UCASE 函数把字段的值转换为大写。
1 | SELECT UCASE(column_name) FROM table_name |
4、 LCASE()
UCASE 函数把字段的值转换为小写。
1 | SELECT LCASE(column_name) FROM table_name |
5、 MID()
MID 函数用于从文本字段中提取字符。
语法:
1 | SELECT MID(column_name,start[,length]) FROM table_name |
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
start 必需。规定开始位置(起始值是 1)。
column_name 必需。要提取字符的字段。
6、 LEN()
LEN() 函数返回文本字段中值的长度。(若NULL,则返回NULL)
举例:
1 | SELECT LEN(City) as LengthOfCity FROM Persons; |
7、 ROUND()
ROUND() 函数用于把数值字段舍入为指定的小数位数。
语法:
1 | SELECT ROUND(column_name,[decimals]) FROM table_name |
column_name 必需。要舍入的字段。
decimals 可选。规定要返回的小数位数。不选默认为0.
举例:
1 | SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products; |
8、 FORMAT()
FORMAT() 函数用于对字段的显示进行格式化。
1 2 | SELECT ProductName, FORMAT(Now(),'YYYY-MM-DD') as PerDate FROM Products; |
十三、 其他语句
1、 UNION
(字段要相等)UNION 操作符用于合并两个或多个 SELECT 语句的结果集
UNION会合并相同的字段数据
UNION ALL会选择所有的数据,而不会合并重复的数据
2、 SELECT INTO
3、 AUTO_INCREMENT 自动增长
默认AUTO_INCREMENT的开始值是1,自动增长1
创建表时添加
1 2 3 4 5 6 7 | CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
PRIMARY KEY (P_Id) ) |
要让 AUTO_INCREMENT 序列以其他的值起始的语法:
1 | ALTER TABLE Persons AUTO_INCREMENT=100; |
4、 NULL 值
IS [NOT] NULL
1) NULL 值的处理方式与其他值不同。
2)NULL 用作未知的或不适用的值的占位符。
3)注释:无法比较 NULL 和 0;它们是不等价的。
举例:
1 2 | SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL |
5、 NULL函数
我们有时希望 NULL 值为 0。
MySQL的IFNULL()函数表示:
1 2 | SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products; |
COALESCE()意义同IFNULL()
1 2 | SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0)) FROM Products; |
MySQL添加用户、删除用户与授权
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):
1.新建用户
1.1 登录MYSQL:
@>mysql -u root -p
@>密码
1.2 创建用户:
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
这样就创建了一个名为:test 密码为:1234 的用户。
注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。
1.3 然后登录一下:
mysql>exit;
@>mysql -u test -p
@>输入密码
mysql>登录成功
2.为用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.1 登录MYSQL(有ROOT权限),这里以ROOT身份登录:
@>mysql -u root -p
@>密码
2.2 首先为用户创建一个数据库(testDB):
mysql>create database testDB;
2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
mysql>flush privileges;//刷新系统权限表
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.4 如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on testDB.* to test@localhost identified by '1234';
mysql>flush privileges; //刷新系统权限表
2.5 授权test用户拥有所有数据库的某些权限:
mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
//test用户对所有数据库都有select,delete,update,create,drop 权限。
//@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
//对localhost授权:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';即可。
3. 删除用户
@>mysql -u root -p
@>密码
mysql>Delete FROM user Where User='test' and Host='localhost';
mysql>flush privileges;
mysql>drop database testDB; //删除用户的数据库
删除账户及权限:>drop user 用户名@'%';
>drop user 用户名@ localhost;
4. 修改指定用户密码
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";
mysql>flush privileges;
5. 列出所有数据库
mysql>show database;
6. 切换数据库
mysql>use '数据库名';
7. 列出所有表
mysql>show tables;
8. 显示数据表结构
mysql>describe 表名;
9. 删除数据库和数据表
mysql>drop database 数据库名;
mysql>drop table 数据表名;