SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
#1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
#2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
#3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
关闭服务端 net stop MySQL
启动服务端 net start MySQL
增 create database db1 charset utf8;
查 show databases;
show create database db1;
改 alter database db1 charset gbk;
删 drop database db1
查看所在库 select database();
切换库 use db1;
增 creat table t1(id int, name char);
查 show tables;
show create table t1;
desc t1; 查看表结构
改 alter table t1 add sex char; 添加字段
alter table t1 drop sex; 删除字段
alter table t1 modify name char(8); 修改字段类型
alter table t1 change name Name char(16); 修改原字段名及该字段类型
删 drop table t1;
增 insert into db1.t1(id,name) values
(1,'xionger'),(2,'xiongda');
查 select id,name from db1.t1 查指定字段
select * from db1.t1 查所有(不推荐使用)
改 update t1 set name='DD' where id=2;
删 delete from t1 where id=2; 删除指定字段记录
truncate t1; 清空表中记录(重置整张表)
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
)
案例: create table t1(id int primary key auto_inrement, name char(32) not null, sex char(6) not null default "male");
修改表名
ALTER TABLE 表名 RENAME 新表名;
增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
删除字段
ALTER TABLE 表名 DROP 字段名;
修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
复制表结构+记录 (key不会复制: 主键、外键和索引)
create table t2 select * from t1;
只复制表结构
select * from service where 1=2; 条件为假,查不到任何记录
reate table t4 like employees;
TINYINT SMALLINT MEDIUMINT INT BIGINT
为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关
float[(M,D)] [UNSIGNED] [ZEROFILL]
定义:m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30
精确度:随着小数的增多,精度变得不准确
double[(M,D)] [UNSIGNED] [ZEROFILL]
定义:m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30
精确度:随着小数的增多,精度比float要高,但也会变得不准确
decimal[(m[,d])] [unsigned] [zerofill]
定义: 准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
精确度: 随着小数的增多,精度始终准确,对于精确数值计算时需要用此类型,decaimal能够存储精确值的原因在于其内部按照字符串存储。
日期类型
YEAR 年
DATE 年-月-日
TIME 时:分:秒
DATETIME 年-月-日 时:分:秒
char : 定长,数据超出预定长度报错,不够用空格补位
- 特点: 查询速度快,单浪费空间
- 检索:在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)
- 注意:精准查找时(select * from user where name='xionger';),char类型补充的空格会自动去掉进行匹配,但是用like模糊查找时(select * from user name like 'xionger';),char类型补充的空格也会进行匹配
varchar : 变长,数据超出预定长度报错,不够就是实际长度
- 特点: 精准,节省空间,查询较慢
- 检索:尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容
查看字段长度 : char_length(字段)
select char_length(name) from user;
枚举enum: 多选一
集合set: 多选多
create table type_enum(
gender enum('male','remale','serect'),
);
insert into type_enum values ('remale');
create table type_enum(
gender set('a','b','c'),
);
insert into type_enum values ('a', 'b');
约束条件与数据类型的宽度一样,都是可选参数
作用:用于保证数据的完整性和一致性
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用0填充
not null - 不可空
null - 可空
default 默认值
创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
create table user(
id int,
name char(16) not null,
sex char(6) not null default "male"
);
单列唯一
create table user(
id int unique,
name char(16)
);
联合唯一
create table server(
id int unique,
ip char(15),
port int,
ip port,unique(ip,port)
)
从约束角度看: 主键等于not null + unique
1.一张表中有且有一个主键
2.若没有设置主键则会由上到下检索非空且唯一的字段作为主键
3.若没有主键也没有非空且唯一的字段,就采用默认的隐藏字段作为主键(7个bytes),这样丧失了查询效率
innodb类要依据主键组织数据结构(idb文件)
索引的目的是一步步缩小查询范围,减少IO次数
1.auto_increment通常与primary key连用
2.auto_increment通常加给id字段
3.auto_increment只能给被定义成key(unique key,primary key)的字段加