(Sql语句)
1. 操作库
创建库 CREATE DATABASE [IF NOT EXISTS] 数据库名 [参数[ 参数] [ 参数]...];
显示库
SHOW DATABASES;
显示数据库创建语句
SHOW CREATE DATABASE 数据库名;
修改库
ALTER DATABASE 数据库名[ 参数[ 参数][ 参数]...];
注意: 不能改数据库的名字
删除库
DROP DATABASE [IF EXISTS] 数据库名;
2、操作表
操作表之前使用需要先确定使用哪个数据库
USE 数据库名
创建表
CREATE TABLE 表名(列名 类型[,列名 类型][,列名 类型]...);
查看所有表
SHOW TABLES;
查看表的创建语句
SHOW CREATE TABLE 表名;
显示表结构
DESC 表名;
修改表名
RENAME TABLE 原表名 TO 新表名;
修改字符集
ALTER TABLE 表名 CHARACTER SET 字符集名;
删除表
DROP TABLE 表名;
操作列
追加列
ALTER TABLE 表名 ADD 列名 类型[,列名 类型][,列名 类型]...;
修改列类型
ALTER TABLE 表名 MODIFY 列名 类型[,列名 类型][,列名 类型]...;
修改列
ALTER TABLE 表名 CHANGE COLUMN 原列名 新列名 类型;
删除列
ALTER TABLE 表名 DROP 列名;
操作数据(增删改)
插入
语法:
INSERT INTO 表名[(列名[,列名]...)] VALUES(值[,值]...);
注意事项:
插入值类型必须与对应列的数据类型一致
数据不能超出长度
插入值得为之必须与列名顺序一致
字符和日期数据要放在单引号中
插入空值使用null
如果不指定插入哪一列, 就是插入所有列
中文数据
由于默认码表是utf8, 而cmd.exe的码表是gbk, 在插入中文数据的时候会报错, 所以我们需要修改客户端码表
先查看系统变量: SHOW VARIABLES LIKE 'character%';
修改客户端码表: SET character_set_client=gbk;
这样就解决了中文插入的问题, 但在查询数据的时候仍然显示为乱码, 这是因为mysql向cmd传输数据的时候使用的是utf8
修改输出数据的码表: SET character_set_results=gbk
修改
语法
UPDATE 表名 SET 列名=值[,列名=值]...[WHERE 条件语句];
DISTINCT
语法
SELECT [DISTINCT] 列名[, 列名]... FROM 表名
注意事项
*可以替代列名, 表示所有列, 但是通常我们为了提高代码的可读性, 不使用*
DISTINCT为过滤重复记录
如果DISTINCT后面跟多列, 是过滤掉多列合并之后的重复
表的约束
唯一约束 unique
unique约束的字段在整张表中唯一, 不可重复, 不包括多个NULL
创建表时设置唯一
create table test (
id int,
name varchar(20) unique
);
删除唯一约束
show create table test; 发现唯一索引名叫name
alter table test drop index name;
添加唯一约束
alter table test change name name varchar(20) unique;
非空约束 not null
not null约束的字段不能为空
创建表时设置非空
create table test1 (
id int,
name varchar(20) not null
);
删除非空约束
alter table test1 change name name varchar(20);
添加非空约束
alter table test1 change name name varchar(20) not null;
主键约束 primary key
通常我们在设计表的时候需要给每一条记录一个独有的标识, 我们就用主键来约束这个标识.
primary key用来标识一个字段, 这个字段是非空且唯一的.
创建表时设置主键
create table test2(
id int primary key,
name varchar(20)
);
删除主键
alter table test2 drop primary key;
在制定列上添加主键
alter table test2 change id id int primary key;
alter table test2 add primary key(id);
设置主键自动增长
create table test3(
id int primary key auto_increment,
name varchar(20)
);
删除自增长
alter table test3 change id id int;
设置自增长
alter table test3 change id id int auto_increment;
UUID主键
128位的2进制, 32位16进制加上4个-
java.util.UUID.randomUUID().toString()
3c2372a4-da2a-4470-b17a-f2e50ac79636
外键约束 foreign key
foreign key约束某一列的值是参照另外一列
创建表时添加外键约束
create table husband(
id int primary key,
name varchar(20) not null
);
create table wife(
id int primary key,
name varchar(20) not null,
husband_id int,
constraint husband_id_fk foreign key(husband_id) references husband(id)
);
wife表的husband_id的值必须是husband表中的id
被外键引用的记录不能删除, 如果想要删除某条被引用的记录, 需要找到引用这条记录的记录, 解除关联
被外键引用的表不能删除, 如果想要删除被引用的表, 需要删除所有引用此表的外键
删除外键约束
alter table wife drop foreign key husband_id_fk;
添加外键约束
alter table wife add constraint husband_id_fk foreign key(husband_id) references husband(id)