SQL语句分类
- DCL (Data Control Language):数据控制语言;用来管理用户及权限
- DDL(Data Definition Language):数据定义语言;用来定义数据库对象:库,表,列等
- DML(Data Manipulation Language):数据操作语言;用来定义数据库记录(数据)
- DQL(Data Query Language):数据查询语言;用来查询数据;难
命令分类不一定准确,没必要分得太准确!
DCL
mysql_secure_installation #初始化数据库
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword'); #更改某一用户密码
select Host,User,Password from mysql.user; #查看用户信息
grant 权限 on 库名.表 to 用户@主机 identified by '密码'; #给用户加权限和密码
grant all privileges on *.* to root@'%' identified by '123456'; #给root用户在所有主机上的所有权限(用于第三方登录数据库)
show grants for user250@localhost; #查看250用户的权限
revoke all on *.* from user250@localhost; #回收250用户在localhost主机上的所有权限
DDL
show databases; #查看所有数据库
create database DBNAME; #创建数据库
drop database DBNAME; #删除数据库
use DBNAME; #使用(进入)某一数据库
show create database DBNAME; #查看数据库状态
alter database DBNAME default character set=utf8; #修改指定数据库的字符编码
show tables; #查看所有表
desc TABLENAME; #查看表结构
alter table huluwa add color varchar(10); #给表添加字段
alter table huluwa modify name varchar(20); #修改表字段(不重新命名)
alter table 表名 change 原名 新名 类型及约束; #修改表的字段
alter table huluwa drop color; #删除表的字段
drop table huluwa; #删除表
- 创建表
create table huluwa (
-> id int unsigned auto_increment primary key,
-> name varchar(10),
-> age tinyint unsigned,
-> high decimal(5,2),
-> gender enum('boy','girl','unknow')default 'unknow',
-> lost bit(1));
数据类型:
常用数据类型
- 整数型:int,bit
- 小数型:decimal #decimal(5,2)
- 字符串:varchar,char
- 时间:date,time,datetime
- 枚举类型:enum
约束
- primary key:主键
- not null:不为空
- unique:字段不重复
- default:默认
- foreign key:外键,对关系字段进行约束,当关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常。
数值类型常用
类型 | 字节大小 | 有符号范围(signed) | 无符号范围(unsigned) |
---|---|---|---|
tinyint | 1 | -128~127 | 0~255 |
smallint | 2 | -32768~32767 | 0~65535 |
mediumint | 3 | -8388608~8388607 | 0~16777215 |
int/integer | 4 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8 | -9223372036854775808~ 9223372036854775807 |
0~18446744073709551615 |
字符串
类型 | 字节大小 | 示例 |
---|---|---|
char | 0~255 | 不能伸缩(定多少我就取多少) |
varchar | 0~255 | 可以伸缩(要浪费一个字节指定字符长度) |
text | 0~65535 | 大文本 |
日期时间类型
类型 | 字节大小 | 示例 |
---|---|---|
date | 4 | '2019-01-01' |
time | 3 | '12:30:30' |
datetime | 8 | '2019-01-01 12:30:30' |
timestamp | 4 | '1970-01-01 00:00:01'UTC~'2038-01-01 00:00:01'UTC |
DML
insert into 表名 values (...); #插入数据
insert into 表名 valuse (...),(...),...; #多条插入数据
insert into 表名(字段) valuse(...); #部分插入(无数据为null)
update 表名 set 列=值... where 过滤条件; #修改数据
update huluwa set age=age+1 where name in('大娃','二娃'); #数据修改支持四则运算
update huluwa set age=age+1 where name in('大娃','二娃'); #条件选择支持in语法
delete from 表名 where 条件; #删除(delete / truncate)
DQL
- 单表查询
select * from TABLENAME; #查询表中所有数据
select distinct age from huluwa; #distinct 查询取消重复行
select * from huluwa where lost='yes'; #条件查询
select * from huluwa where age between 3 and 6; #条件查询之between
select * from huluwa where not (age > 3 and age < 6); #条件查询之not和运算符
select * from huluwa where age > 3 and lost='no'; #条件查询之and和or
select * from huluwa where name like '%aaa%'; #条件查询之模糊查询like %可以代表多个字符
select * from huluwa where name like '____'; #条件查询之模糊查询like _可以代表一个字符
select * from huluwa where high is not null; #判断是否为空 is null 或 is not null
select * from huluwa order by high desc; #查询并排序order desc降序 asc升序
select *,age*1.5 from huluwa ; #数字类型的列可以进行四则运算,无法转换为整数的以0计算
select *,age+ifnull(high,1) from huluwa ; #四则运算也支持ifnull语句