MySQL中数据表和数据的操作

 一.数据库表的操作

1.数据表的创建

mysql> create table t_user(
    ->   id int unsigned not null auto_increment primary key,
    ->   name varchar(40) not null,
    ->   sex enum('man', 'woman', 'secret') default 'man',
    ->   age tinyint unsigned
    -> ) engine=innodb default charset=utf8mb4;
Query OK, 0 rows affected (0.01 sec)

not null:该字段不能为空
auto_increment 自动增长
primary key:主键,主键对应的列不能重复
default :可以设置默认值,当插入时,如果没有插入该列对应的值,则会插入默认值
engine :引擎
default charset:默认编码

2.数据表的查询

use db_itheima;切换到db_itheima数据库下

show tables:展示db_itheima数据库下的所有数据表

mysql> use db_itheima;
Database changed
mysql> show tables;
+----------------------+
| Tables_in_db_itheima |
+----------------------+
| it_article           |
| it_student           |
| t_user               |
+----------------------+
3 rows in set (0.00 sec)

show create table t_user:查看t_user数据表的创建语句

mysql> show create table t_user;
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                                                     |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_user | CREATE TABLE `t_user` (
  `  id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `  name` varchar(40) NOT NULL,
  `  sex` enum('man','woman','secret') DEFAULT 'man',
  `  age` tinyint(3) unsigned DEFAULT NULL,
  PRIMARY KEY (`  id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4           |
+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

3.数据表的修改
可以修改的内容
(1)数据表的列(列名,数据类型)
添加列
# alter table t_user add birth date first; # 添加在最前面
alter table t_user add birth date after age; #添加到age列后

mysql> alter table t_user add birth date after age;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t_user;
+-------+------------------------------+------+-----+---------+----------------+
| Field | Type                         | Null | Key | Default | Extra          |
+-------+------------------------------+------+-----+---------+----------------+
| id    | int(10) unsigned             | NO   | PRI | NULL    | auto_increment |
| name  | varchar(40)                  | NO   |     | NULL    |                |
| sex   | enum('man','woman','secret') | YES  |     | man     |                |
| age   | tinyint(3) unsigned          | YES  |     | NULL    |                |
| birth | date                         | YES  |     | NULL    |                |
+-------+------------------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)


修改列名和数据类型
alter table t_user change name NAME varchar(30);
修改数据类型
alter table t_user modify age int unsigned;
删除列
alter table t_user drop age;
(2)数据表名
alter table t_user rename it_user;


(3)引擎
alter table t_user engine=myisam;
alter table t_user engine=innodb;
(4)编码类型
alter table t_user default charset=utf8;

4.数据表的删除
drop table t_user;


二.数据的操作
1.添加数据
insert into t_user values(null,'xianqian','woman',23,'1996-09-23'); # 所有列的值都需要写
insert into t_user(id,name) values(null, 'xiaoming'); # 只插入id和name值
insert into t_user values (null, 'tom','man',34,'1985-03-24'),(null,'jack','man',10,'2009-03-20'); # 可以插入多条数据

mysql> insert into t_user values(null,'xianqian','woman',23,'1996-09-23');# 所有列的值都需要写
insert into t_user(id,name) values(null, 'xiaoming');   # 只插入id和name值
insert into t_user values (null, 'tom','man',34,'1985-03-24'),(null,'jack','man',10,'2009-03-20');      # 可以插入多条数据      Query OK, 1 row affected (0.02 sec)

mysql> insert into t_user(id,name) values(null, 'xiaoming');# 只插入id和name值
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_user values (null, 'tom','man',34,'1985-03-24'),(null,'jack','man',10,'2009-03-20');# 可以插入多条数据
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t_user;
+----+----------+-------+------+------------+
| id | name     | sex   | age  | birth      |
+----+----------+-------+------+------------+
|  1 | xianqian | woman |   23 | 1996-09-23 |
|  2 | xiaoming | man   | NULL | NULL       |
|  3 | tom      | man   |   34 | 1985-03-24 |
|  4 | jack     | man   |   10 | 2009-03-20 |
+----+----------+-------+------+------------+
4 rows in set (0.00 sec)


2.查询数据
select * from t_user; #查询所有列的内容
3.修改数据
update t_user set age=19; # 所有记录的age列都会被改为19
update t_user set age=18,age=20 where name='jack'; # name=jack的记录的age列被改为18;
update t_user set sex='man' where age =18 or name ='jack'; #所有name='jack'或age=18的记录的sex列被改为'man'
4.删除数据
delete from t_user where name='jack';
delete from t_user where name='tom' and age=20;
5.清空数据
delete from t_user; # 删除所有数据
truncate t_user;
6.delete与truncate的区别
delete:
属于DML语句,删除所有数据
执行时会被记录事务,可以执行rollback回滚操作
删除大量数据时速度慢,并且不会回收高水位线
可以带条件删除

truncate:
属于DDL语句,删除所有数据,实际上是重新创建表结构
执行时不会记录事务,不能执行rollback回滚操作
删除大量数据时速度快,可以回收高水位线
不能带条件删除


扩展知识
1.整数类型后的括号里的数字什么含义?
int(11),tinyint(3)
括号中的数字通常都是无效的,要想让它有效,需要在定义时加上unsigned和zerofill
create table it_int(
id tinyint(3) unsigned zerofill
);

原文地址:https://www.cnblogs.com/golinux/p/10846783.html