创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification] [create_specification] [...]
create_specification:(默认属性)
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
[] 是可选项
CHARACTER SET: 指定数据库采用的字符集
COLLATE: 指定数据库字符集的校验规则
样例:创建test数据库
create database if not exists test charset utf8 collate utf8_general_ci;
显示所有数据库
show databases;
显示数据库详细信息
显示当初创建数据库时的详细信息,如创建时的参数之类。
show create database 数据库名;
/*!40100 default… */ 不是注释,表示当前mysql版本大于4.01版本,就执行这句话
show create database 数据库名\G;
加个\G可以显示更详细的信息。
修改数据库
对数据库的修改主要指的是修改数据库的字符集,校验规则
alter database 数据库名称 属性...
样例:修改数据库字符集为gbk
alter database test charset gbk;
删除数据库
drop database [if exists] 数据库名称;
查看MySQL连接状态
用来查询有哪些用户连接了MySQL
show processlist;
db:该用户当前所处数据库。(NULL,没有进入数据库)
创建表
CREATE TABLE table_name (
列属性名称 属性类型,
列属性名称 属性类型,
..... .....
) character set 字符集 collate 校验规则 engine 存储引擎;
character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
样例:创建学生表
create table student(
sno int,
sname varchar(20),
sex bool
)
char和varchar区别:
char固定字符串长度(1个字节),相当于字符数组。
varchar顾名思义,可变的字符串长度,相当于string。
查看当前数据库中的所有表
show tables;
查看表结构
desc 表名;
向表中插入一条记录(insert)
insert into student values(1, '张三', 1);
方法一:
insert into 表名 values(属性1的值,属性2的值, ...);
没有指定表的属性字段,需要按照表属性的实际顺序赋值。
样例:
insert into student values(1, '张三', 1);
方法二:
insert into student(属性1, 属性2, ...) values(属性1的值, 属性2的值, ...);
显示指定表的属性,按照指定的顺序赋值即可。
样例:
insert into student(sname, sno, sex) values('王五', 3, 1);
表属性的实际顺序是sno、sname、sex
但是我显示指定了表的属性,因此按照我指定的顺序赋值即可。
向表中插入多条记录
以方法二为例:
insert into student(sno, sname, sex)
values(1, '张三', 1),(2, '李四', 1), (3, '王五', 1);
方法一类似。
修改表
//添加属性字段
ALTER TABLE 表名 ADD 属性字段 属性类型 [DEFAULT expr][,column datatype]...;
//修改属性字段
ALTER TABLE 表名 MODIfy (column datatype [DEFAULT expr][,column datatype]...);
//删除属性字段
ALTER TABLE 表名 DROP (column);
样例一:添加年龄(在姓名后面)
alter table student add age int comment '年龄' after sname;
comment关键字表示注释,后面紧跟着的就是注释内容。
after:在某字段后面插入。
无法使用before在某个字段前插入属性字段
注意:虽然我们可以在任意一个属性字段后面插入一个新的属性字段。
但是一般不建议这样做,可能导致上层服务器原先访问数据库的代码逻辑出现问题。
要添加新字段,最好就在末尾添加新字段。
样例二:modify修改sname字段的属性(or 大小等):
alter table student modify sname varchar(60);
样例三:change修改sname字段的名称为xingming
alter table student change xingming sname varchar(60);
change即使只修改列名,也得带上列属性(可修改)。
可以理解为change就是重新设置列,只是设置后列名变了,列属性还是留用原来的那个。
样例四:change修改sname属性类型,但属性名不要变:
alter table student change sname sname varchar(20);
change是重新设置列,因此即使只是修改属性类型,但是属性名也得填写两次,意味着重新设置,但还是和原来的名字相同。
modify和change的区别:
- modify:修改列属性,但不能修改列名
- change:重新设置列,包括列属性和列名。
**总结:**需要修改列名的时候,用change。只需要修改列属性的时候,由于change还要写两遍一样的列名,比较冗余,因此使用modify。
但属性也不是说改就能改的,比如sname的属性是varchar,如果要改成int,会报错,无法修改,因为表中已经填写的sname数据,是varchar类型,不能转成int。
删除表
drop table student;
删除表中所有数据(不删除表和表属性)
delete from student;
总结:
虽然知道了怎么修改表结构,但实际上最好不要轻易动表的结构,而是在项目架构的时候,就考率好要怎么设计数据库。