一.表的结构的增删改
添加数据类型
alter table 表名 add 字段 数据类型; #如果字段存在则会报错 Duplicate column name '字段'
#修改数据类型
alter table 表名 modify 字段 数据类型; #如果出现Truncated incorrect INTEGER value: '小明'的报错则是因为字段与数据类型不符
#更改字段名甚至数据类型。
alter table 表名 change 老字段 新字段 新数据类型; #数据类型可改可不改,注意数据类型的更改要符合本身规则。
#删除字段
alter table 表名 drop 字段;
查看表结构(字符,数据类型,约束)
MariaDB [mysql]> desc s; +--------+-------------------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------------------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | | age | tinyint(3) unsigned | YES | | 0 | | | high | decimal(5,2) | YES | | NULL | | | gender | enum('男','女','中性','保密') | NO | | 保密 | | | cls_id | int(10) unsigned | YES | | NULL |
插入字段的内容 (insert into 表 values (赋值))
insert into s values(0,'酱爆',23,192.555,‘男’,1901)
#格局字段顺序赋予value值,id赋值0但是因为设置了auto_increment的主键,会自动增加为1; # 甚至可以赋值为default或者null,因为默认自增,综上来说,设置了主键自增的字段,添加数据的时候可以用0,null,default来做占位符。 # 另外往gender的字段内添加数据,可以根据索引来插入。即1为男,2为女.. #不管数据插入是否成功,自增都会生效
查看表内数据
select * from 表名; MariaDB [mysql]> select * from s; +----+--------+------+--------+--------+--------+ | id | name | age | high | gender | cls_id | +----+--------+------+--------+--------+--------+ | 1 | 酱爆 | 23 | 192.56 | 男 | 1901 | | 2 | 酱爆 | 23 | 192.56 | 男 | 1901 | +----+--------+------+--------+--------+--------+
几个报错分析:
1.MariaDB [mysql]> insert into s values(null,'酱爆',23,192.455,null,1901); ERROR 1048 (23000): Column 'gender' cannot be null #此报错是因为设置gender的null约束为NO,如果不设置的话,就将null默认为一个
字符串插入。另外往gender的字段内添加数据,可以根据索引来插入。即1为男,2为女...
1.Invalid default value for 'gender' #此报错是因为前方null字段设置为空,而默认值设置不为空冲突 2.column 'gender' has duplicate dvalue'?' in ENUMigned #编码格式改为utf8 Column count doesn't match value count at row 1 #添加的数据个数与字段个数不匹配
3. Field 'id' doesn't have a default value #这是因为id的约束设置为非空值,并且没有默认值和主键自增
部分插入
insert into s (name,age) values('酱爆',23) -> ; Query OK, 1 row affected (0.002 sec) # 然后查看 MariaDB [mysql]> select * from s; #*代表所有 +----+--------+------+--------+--------+--------+ | id | name | age | high | gender | cls_id | +----+--------+------+--------+--------+--------+ | 1 | 酱爆 | 23 | 192.56 | 男 | 1901 | | 2 | 酱爆 | 23 | 192.56 | 男 | 1901 | | 3 | 酱爆 | 23 | 192.46 | 女 | 1901 | | 4 | 酱爆 | 23 | NULL | 保密 | NULL | +----+--------+------+--------+--------+--------+
这里有两个需要注意的地方:
1)id自增和gender为保密,这是因为设置了主键自增和设置了默认值为‘保密’
2)high和cls_id为null,因为插入时没有赋值,会默认为null,但是这是建立在null的约束为YES的前提下,不然会报错。
3)如果在id的字段内插入值,不能重复
4)插入的汉字数据变成 ?,这是因为数据库字符集格式没改,试着改为utf8.
5)如果没有改变字符集是无法将汉字当作默认值设置表结构的。
插入指定字段(列)的多行信息
insert into 表名 (字段,字段) values(赋值,赋值),(赋值,赋值)
insert into baba (name,age) values('酱爆',23),(’熊大‘,23); | 5 | 酱爆 | 23 | NULL | 保密 | NULL | | 6 | 熊大 | 23 | NULL | 保密 | NULL |
修改字段内数据(限定范围多用where)
update s set name='zz' where name='酱爆'; +----+--------+------+--------+--------+--------+ | id | name | age | high | gender | cls_id | +----+--------+------+--------+--------+--------+ | 1 | zz | 23 | 192.56 | 男 | 1901 | | 2 | zz | 23 | 192.56 | 男 | 1901 | | 3 | zz | 23 | 192.46 | 女 | 1901 | | 4 | zz | 23 | NULL | 保密 | NULL | | 5 | zz | 23 | NULL | 保密 | NULL | | 6 | 熊大 | 23 | NULL | 保密 | NULL | | 7 | zz | 23 | NULL | 保密 | NULL | | 8 | 熊大 | 23 | NULL | 保密 | NULL |
修改多个字段的内容(update 表 set ...)
update s set name='baba' ,age=12 where id=1; MariaDB [mysql]> select * from s; +----+--------+------+--------+--------+--------+ | id | name | age | high | gender | cls_id | +----+--------+------+--------+--------+--------+ | 1 | baba | 12 | 192.56 | 男 | 1901 | | 2 | zz | 23 | 192.56 | 男 | 1901 | | 3 | zz | 23 | 192.46 | 女 | 1901 | | 4 | zz | 23 | NULL | 保密 | NULL | | 5 | zz | 23 | NULL | 保密 | NULL | | 6 | 熊大 | 23 | NULL | 保密 | NULL | | 7 | zz | 23 | NULL | 保密 | NULL | | 8 | 熊大 | 23 | NULL | 保密 | NULL | +----+--------+------+--------+--------+--------+
删除数据 (delete from 表 + 限定条件)
delete from s where id =8; #如果不用where限定会删除所有表内的数据,慎用
删除用户:delete from user where user=''
删除后添加数据
insert into s (name,age) values('酱爆',22); #查看字段信息(发现id为8的数据删除后,下条增加的数据id为9,这是因为id自增的属性在起作用,有一定的保护作用) MariaDB [mysql]> select * from s; +----+--------+------+--------+--------+--------+ | id | name | age | high | gender | cls_id | +----+--------+------+--------+--------+--------+ | 1 | baba | 12 | 192.56 | 男 | 1901 | | 2 | zz | 23 | 192.56 | 男 | 1901 | | 3 | zz | 23 | 192.46 | 女 | 1901 | | 4 | zz | 23 | NULL | 保密 | NULL | | 5 | zz | 23 | NULL | 保密 | NULL | | 6 | 熊大 | 23 | NULL | 保密 | NULL | | 7 | zz | 23 | NULL | 保密 | NULL | | 9 | 酱爆 | 22 | NULL | 保密 | NULL | +----+--------+------+--------+--------+--------+
查看表内数据:select * from 表名;
查看表结构:desc 表名;
查看表结构信息 :show create table 表名;
逻辑删除
1)增加字段并设置默认值为0
alter table s add is_delete bit(1) default 0;
2)插入新信息
insert into s ('name','age') values('baba',13),('mama',14);
3)查看(发现is_delete字段内容依然空白,这是因为默认为0的数据太小,不能查看到)
MariaDB [mysql]> select * from s; +----+--------+------+--------+--------+--------+-----------+ | id | name | age | high | gender | cls_id | is_delete | +----+--------+------+--------+--------+--------+-----------+ | 1 | baba | 12 | 192.56 | 男 | 1901 | | | 2 | zz | 23 | 192.56 | 男 | 1901 | | | 3 | zz | 23 | 192.46 | 女 | 1901 | | | 4 | zz | 23 | NULL | 保密 | NULL | | | 5 | zz | 23 | NULL | 保密 | NULL | | | 6 | 熊大 | 23 | NULL | 保密 | NULL | | | 7 | zz | 23 | NULL | 保密 | NULL | | | 9 | 酱爆 | 22 | NULL | 保密 | NULL | | | 10 | hauhua | 13 | NULL | 保密 | NULL | | | 11 | baba | 13 | NULL | 保密 | NULL | | +----+--------+------+--------+--------+--------+-----------+ 此操作作用在于给逻辑删除的用户标记,0为正常用户,1为逻辑删除用户。
MariaDB [mysql]> insert into s values(null,'酱爆',23,192.455,null,1901)