注:面试过程中整理的学习资料,如有侵权联系我即刻删除。
创建数据库test1:CREATE DATABASE test1;
查看数据库:SHOW DATABASES;
选择具体数据库:USE test1;
删除某个数据库:DROP DATABASE test1;
创建表:CREATE TABLE test1(
-> id INT,
-> name VARCHAR(20));
查看数据库支持哪些存储引擎:SHOW ENGINES;
或者是SHOW ENGINES \G;
一共有显示9种存储引擎,Support表示数据库是否支持这个存储引擎,Comment表示关于存储引擎的评论,Transactions表示是否存储引擎是否支持事务,XA参数表示存储引擎所支持的分布式是否符合XA规范,Savepoints参数表示存储引擎是否支持事务处理中的保存点。SQL语句中,“;”、“\g”、“\G”,都表示语句结束。
查询默认存储引擎:show variables like '%storage_engine%';
三种主要存储引擎特性的对比:
MyISAM存储引擎:这个不支持事务,也不支持外键,所以访问速度很快,因此对事务完整性没有要求且以访问为主的应用应该适合使用这个。
InnoDB存储引擎:在事务上具有优势,支持具有提交、回滚和崩溃恢复能力的事务安装,因此比MyISAM占更多的磁盘空间。因此如果需要进行频繁的更新、删除操作,同时还对事务的完整性要求比较高,需要实现并发控制,此时适合用这个。
MEMORY存储引擎:这个使用内存来存储数据,因此这个的数据访问速度快,但是安全上没有保障。如果应用中数据比较小,需要进行快速访问,则适合使用这个。
SQL的所有整数类型:
查看文档支持:HELP contents;
FLOAT、DOUBLE存储数据时存储的是近似值,DECIMAL存储的是字符串,因此提供了更高的精度,在需要表示金额等货币时优先选择DECIMAL数据类型。
向表中插入数据:
insert into 表名(id,name,price)values(2,'banana',4.5);
查询表:
select * from 表名;
BIT类型的使用:
CREATE TABLE bit_test (id BIT(8));
INSERT INTO bit_test VALUES(11),(b'11');//第一个插入的是11,第二个插入3.
SELECT id+0 FROM bit_test; //查询出来的值是十进制
SELECT BIN(id+0) FROM bit_test; //查询出来的是二进制
SQL支持的text类型。
表是组成数据库的基本元素,由若干个字段组成。表的操作包括创建表、查看表、删除表、修改表。
表中的数据库对象包括列、索引、触发器、存储过程等等。
列是字段,创建表时要指定列的名字和数据类型。
索引提供快速访问数据的途径。
触发器是用户定义的事务命令的结合,当对一个表中的数据进行插入删除或更新时这组命令就会自动执行。
创建表的语法:
CREATE TABLE name(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
...............
字段名 数据类型
);
表中的各个字段都是字段,列被称为字段。
查看表的信息:describe table_name;
查看表的详细定义:show create table table_name;
删除表:drop table table_name;(删除完之后,再用describe查看是否还有表的信息)
修改表名:alter table old_name rename new_name;
修改完后用desc old_name;和desc new_name;来查看表信息。
给表增加字段:alter table table_name add 字段_name 类型;这是在表的末尾增加字段,如果语句最后加上first,就是在表的第一个位置增加字段。
在表的指定字段后增加字段:alter table table_name add 字段名 类型
after 字段名;
删除表中的字段:alter table 表名drop 字段名;
修改表中字段的数据类型:alter table 表名modify 字段名 数据类型;
修改表中字段名:alter table 表名change 旧字段 新字段 数据类型;
*****************************(约束)
同时修改表中字段名和数据类型:
alter table 表名 change 旧字段 新字段 新数据类型;
调整字段的顺序到第一位:
alter table 表名modify 字段名 数据类型first;
调整字段A到字段B的后面:
alter table 表名modify 字段A 数据类型 after 字段B;
//表已建立时
去掉unique字段
找到约束名id(show create table)
Alter table ...drop key id;
去掉主键字段
Alter table ...drop primary key;
去掉非空字段
Alter table ...modify 字段 数据类型null;/或者是
...change 字段 字段 数据类型 null;
去掉自增字段
Alter table...modify 字段 数据类型;/change 字段 字段 数据类型;
去掉外键字段
找到约束名id
Alter table...drop foreign key id;
//表已建立时
增加unique字段
Alter table...modify 字段 数据类型 unique;(change)
增加主键字段
Alter table... modify 字段 数据类型 primary key;(change)
增加非空字段
Alter table...modify 字段 数据类型 not full;(change)
增加自增字段(只能设置主键自增,且设置后,不管插入是否成功,主键都自增)
Alter table...modify 字段 数据类型 primary key auto_increment;
增加外键字段
Alter table... add foreign key(外键字段) references 主表(主键字段);
设置非空约束:如果希望表上某个字段的内容不能为空,那就在字段后面加上NOT NULL;
设置字段的默认值:在字段后面跟DEFAULT 默认值;
设置唯一约束:在字段后面跟 UNIQUE,保证所有记录中该字段的值不重复。
用constraint 来约束名字:
设置主键PK约束,主键值得是唯一的、非空的:
<单字段主键>:
在字段后面加上 PRIMARY KEY;就是把这个字段设为主键。
<多字段主键>:
constraint pk_num_name primary key(num,name);
字段num和name都被设置为主键,constraint给PK约束设置一个名字。
设置字段值自动增加:在字段后面加 auto_increment.当数据库表中插入新纪录时,字段上的值会生成唯一的ID,一个数据库表中只能有一个字段使用该约束,该字段规定必须为整数类型。经常会设置为PK主键。num int primary key auto_increment,设置num为主键约束且自动增加。
设置外键约束:设置外键约束的两个表之间会有父子关系,即子表中某个字段的取值范围会由父表决定。子表中只能存在父表中对应该字段的范围,向子表插入超过父表范围的别的数是插入不了的。
在子表创建表时加上:
constraint f_num_enum foreign key(子表字段名) references 父表名(父表字段名)