1.操作表
增:
create table 表名(
字段名 列类型 [可选的参数],
字段名 列类型 [可选的参数],
字段名 列类型 [可选的参数]
)charset = utf8;
例子1:
create table t1(
id int ,
name char(5)
)charset = utf8;
Query OK, 0 rows affected (0.41 sec) # 表示创建成功
增加数据语法:
语法: insert into 表名 (列1,列2) values (值1,'值2');
例子: insert into t1 (id,name) values (1,'zekai');
例子2:
create table t1(
id int auto_increment primary key,
name char(5) not null default 'xxx',
age int not null default 0
)charset = utf8;
表的约束:
auto_increment : 自增 1
primary key : 主键索引,加快查询速度
not null : 标识该字段不能为空
default : 为该字段设置默认值
列类型:
-
数字
-
整型
tinyint
smallint
int
mediumint
bigint
a.整数类型
b.取值范围
c.unsigned 加上代表不能取负数 只适用于整型
应用场景: 根据公司业务的场景,来选取合适的类型
-
浮点型
float: 不一定精确
cecimal: 非常精确的数字(5000.23) decimal(6.2) m是数字总数(符号不算) , d是小数点后个数
mysql> create table t5( -> id int auto_increment primary key, -> salary decimal(16,10), -> num float -> )charset=utf8; Query OK, 0 rows affected (0.55 sec)
-
字符串
-
char(长度): 定长
create table t6( id unsigned int auto_increment primary key, name char(10) not null default 'xxx' )charset=utf8;
-
varchar(长度): 变长
create table t6( id int auto_increment primary key, name varchar(10) not null default 'xxx' )charset=utf8; mysql> insert into t6 (name) values ('hello'); Query OK, 1 row affected (0.05 sec) mysql> select * from t6; +----+-------+ | id | name | +----+-------+ | 1 | hello | +----+-------+ 1 row in set (0.00 sec) mysql> insert into t6 (name) values ('helloworldimthegod'); ERROR 1406 (22001): Data too long for column 'name' at row 1 # 超过约定长度会报错
-
区别:
char: 定长, 无论插入的字符是多少,永远固定占规定的长度
应用场景: 1.身份证
2.手机号
3.md5加密后的值,如密码 等 varchar : 变长, 根据插入的字符串的长度来计算所占的字节数,但是有一个
-
-
时间日期类型
- time
HH:MM:SS ('-838:59:59'/'838:59:59') - date
YYYY-MM-DD(1000-01-01/9999-12-31) - datetime(************************)
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y) - timestamp
YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时) - year
YYYY(1901/2155)
例子:
create table t8( d date, t time, dt datetime ); mysql> insert into t8 values(now(),now(),now()); Query OK, 1 row affected, 1 warning (0.06 sec) mysql> select * from t8; +------------+----------+---------------------+ | d | t | dt | +------------+----------+---------------------+ | 2019-10-29 | 16:13:52 | 2019-10-29 16:13:52 | +------------+----------+---------------------+ 1 row in set (0.00 sec)
- time
-
枚举
列出所有的选项create table t9( id int auto_increment primary key, grnder enum('male','female') )charset utf8; mysql> insert into t9 (grnder) values ('male'); Query OK, 1 row affected (0.13 sec) mysql> insert into t9 (grnder) values ('female'); Query OK, 1 row affected (0.05 sec) mysql> insert into t9 (grnder) values ('asdgsadgkag'); ERROR 1265 (01000): Data truncated for column 'grnder' at row 1
改
-
修改表名
alter table 旧表名 rename 新表名;
-
增加字段
alter table 表名 add 字段名 列类型 [可选参数], add 字段名 列类型 [可选参数]; mysql> alter table t5 add name varchar(32) not null default ''; Query OK, 0 rows affected (0.53 sec) Records: 0 Duplicates: 0 Warnings: 0 上面添加的永远在最后一列之后 alter table 表名 add 字段名 列类型 [可选的参数] first; mysql> alter table t5 add name2 varchar(32) not null default '' first; Query OK, 0 rows affected (0.46 sec) Records: 0 Duplicates: 0 Warnings: 0 alter table 表名 add 字段名 列类型 [可选参数] after 字段名; mysql> alter table t5 add name4 varchar(32) not null default '' after name; Query OK, 0 rows affected (0.45 sec) Records: 0 Duplicates: 0 Warnings: 0
-
删除字段
alter table 表名 drop 字段名; mysql> alter table t5 drop name; Query OK, 0 rows affected (0.41 sec) Records: 0 Duplicates: 0 Warnings: 0
-
修改字段
alter table 表名 modify 字段名 数据类型 [完整性约束条件...]; mysql> alter table t5 modify name2 char(11); Query OK, 1 row affected (0.82 sec) Records: 1 Duplicates: 0 Warnings: 0 alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件...]; mysql> alter table t5 change name22 hobby varchar(32); Query OK, 0 rows affected (0.46 sec) Records: 0 Duplicates: 0 Warnings: # 注意:如将varchar类型转成int类型,原字段必须是数字, # 而且int的最大值是4294967295,原字段的值需要小于等于int的最大值才可以。
-
删
drop table 表名; ### 线上禁用 mysql> drop table t8; Query OK, 0 rows affected (0.23 sec)
-
查
mysql> show tables; +-----------------+ | Tables_in_staff | +-----------------+ | t1 | | t2 | | t5 | | t6 | | t9 | +-----------------+ 5 rows in set (0.00 sec)
-
复制表结构:
show create table t2; +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t2 | CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, `sex` enum('male','female') DEFAULT NULL, `age` int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> create table t10 like t5; Query OK, 0 rows affected (0.41 sec)
操作表数据行
增
-
增加数据
语法: insert into 表名 (列1,列2) values ('值1','值2'); 例子: insert into t1 (id,name) values (1,'zekai'); mysql> insert into t1 (name) select (name4) from t5; Query OK, 1 row affected (0.06 sec) Records: 1 Duplicates: 0 Warnings: 0
-
删
delete from 表名 where 条件; mysql> delete from t5 where id=1; mysql> delete from t5 where id>1; mysql> delete from t5 where id>=1; mysql> delete from t5 where id<1; mysql> delete from t5 where id<=1; mysql> delete from t5 where id>=1 and id<10; Query OK, 1 row affected (0.06 sec) delete from 表名; 删除表中所有的数据 mysql> insert into t5 (salary, num) values (500023.2312345679, 5000.24); Query OK, 1 row affected (0.08 sec) mysql> select * from t5; +----+-------------------+---------+ | id | salary | num | +----+-------------------+---------+ | 4 | 500023.2312345679 | 5000.24 | +----+-------------------+---------+ 1 row in set (0.00 sec) truncate 表名; #### 没有where条件的 mysql> truncate t5; Query OK, 0 rows affected (0.25 sec) mysql> select * from t5; Empty set (0.00 sec) mysql> insert into t5 (salary, num) values (500023.2312345679, 5000.24); Query OK, 1 row affected (0.06 sec) mysql> select * from t5; +----+-------------------+---------+ | id | salary | num | +----+-------------------+---------+ | 1 | 500023.2312345679 | 5000.24 | +----+-------------------+---------+ 1 row in set (0.00 sec)
区别:
- delete之后,插入数据从上一次主键自增加1开始, truncate则是从1开始
- delete删除, 是一行一行的删除, truncate:全选删除 truncate删除的速度是高于deleted
-
改
update 表名 set 列名1=新值1,列名2=新值2 where 条件; mysql> update t66 set name='xxxx' where id=30; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update t66 set name='xxxx' where id<30; mysql> update t66 set name='xxxx' where id<=30; mysql> update t66 set name='xxxx' where id>=30; mysql> update t66 set name='xxxx' where id>30; mysql> update t66 set name='xxxx' where id>20 and id<32; mysql> update t66 set name='xxxx' where id>20 or name='zekai'; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0
-
查
语法: select 列1, 列2 from 表名; (*代表查询所有的列) select * from 表名; (*代表查询所有的列) select * from t66 where id>30 and id<40; select * from t66 where id>30; select * from t66 where id<30; select * from t66 where id<=30; select * from t66 where id>=30; select * from t66 where id!=30; select * from t66 where id<>30; mysql> select * from t1; +------+-------+ | id | name | +------+-------+ | 1 | zekai | +------+-------+ 1 row in set (0.00 sec) between..and...: 取值范围是闭区间 select * from t66 where id between 30 and 40; mysql> select * from t66 where id between 31 and 33; +----+--------+ | id | name | +----+--------+ | 31 | dsadsa | | 32 | dsadsa | | 33 | dsadsa | +----+--------+ 避免重复DISTINCT mysql> select distinct name from t66; +--------+ | name | +--------+ | xxxx | | hds | | dsadsa | +--------+ 3 rows in set (0.00 sec) 通过四则运算查询 (不要用) mysql> select name, age*10 from t3; +------+--------+ | name | age*10 | +------+--------+ | xxx | 100 | +------+--------+ 1 row in set (0.01 sec) mysql> select name, age*10 as age from t3; +------+-----+ | name | age | +------+-----+ | xxx | 100 | +------+-----+ 1 row in set (0.02 sec) in(80,90,100): mysql> select * from t66 where id in (23,34,11); +----+------+ | id | name | +----+------+ | 11 | xxxx | | 23 | hds | +----+------+ 2 rows in set (0.04 sec) like : 模糊查询 以x开头: mysql> select * from t66 where name like 'x%'; +----+------+ | id | name | +----+------+ | 1 | xxxx | | 2 | xxxx | | 3 | xxxx | | 4 | xxxx | | 8 | xxxx | | 9 | xxxx | | 10 | xxxx | | 11 | xxxx | | 15 | xxxx | | 16 | xxxx | | 17 | xxxx | | 18 | xxxx | | 30 | xxxx | +----+------+ 13 rows in set (0.05 sec) 以x结尾: mysql> select * from t66 where name like '%x'; +----+------+ | id | name | +----+------+ | 1 | xxxx | | 2 | xxxx | | 3 | xxxx | | 4 | xxxx | | 8 | xxxx | | 9 | xxxx | | 10 | xxxx | | 11 | xxxx | | 15 | xxxx | | 16 | xxxx | | 17 | xxxx | | 18 | xxxx | | 30 | xxxx | +----+------+ 13 rows in set (0.00 sec) 包含x的: mysql> select * from t66 where name like '%x%';