1202、表管理、数据类型、数据批量处理

文章目录

使用 system 可以在mysql 提示符下执行 操作系统命令

一、表管理

1 客户端把数据存储到数据库服务器上过程是什么样的

**第一步:**连接数据库服务器(连接的方式:命令行 脚本 访问图形工具)

**第二步:**创建存储数据的库 (存放表的目录)

**第三步:**创建存储数据的表 (表就是存储数据的文件)

**第四步:**插入表记录 (向文件里添加行)

**第五步:**断开连接

2 库名是有命名规则

**仅可以使用数字、字母、下划线、**不能纯数字

区分字母大小写,

具有唯一性

不可使用指令关键字、特殊字符

3 建库的基本命令 create database 库名;

mysql> CREATE DATABASE gamedb ;
mysql> CREATE DATABASE GAMEDB ;

mysql> CREATE DATABASE GAMEDB ;     			# 报错
mysql> CREATE DATABASE IF NOT EXISTS gamedb ;   # 正常

mysql> show  databases;          				#查看库

mysql> 

4 删库 drop database 库名;

mysql> drop database gamedb;        # 删除数据库   只允许删除自己创建的
Query OK, 0 rows affected (0.00 sec)

mysql> drop database gamedb;       # 删除不存在的库,会报错
ERROR 1008 (HY000): Can't drop database 'gamedb'; database doesn't exist

mysql> drop database if exists gamedb;   # 删除不存在的库,可屏蔽报错信息
Query OK, 0 rows affected, 1 warning (0.00 sec)

5 建表命令格式

使用“建表范式”衡量表创建的是否合理

在这里插入图片描述

1NF 表头下的数据不能再拆分

2NF 一张表里只存储一种数据信息 ,不能用一张表存储多种数据信息

3NF 表中表头的数据 不能依赖其他表头的数据

create  table  库名.表名(
表头名1  数据类型, 
表头名2  数据类型,
表头名3  数据类型,
表头名4  数据类型
);
mysql> create database 学生库;    
mysql> use  学生库;
mysql> create table 学生库.学生信息表(姓名 char(10) , 班级 char(9) , 性别 char(4) , 年龄 int );
mysql> show tables;
+------------------+
| Tables_in_学生    |
+------------------+
| 学生信息表         |
+------------------+

mysql> desc 学生.学生信息表;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 姓名   | char(10) | YES  |     | NULL    |       |
| 班级   | char(9)  | YES  |     | NULL    |       |
| 性别   | char(4)  | YES  |     | NULL    |       |
| 年龄   | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+

mysql> drop table 学生.学生信息表;         # 删除表

mysql> drop database 学生;
mysql> create database studb;
Query OK, 1 row affected (0.00 sec)

mysql> create table studb.stu(name char(10) , class char(9) , gender char(4) , age int );
Query OK, 0 rows affected (0.33 sec)

mysql> desc studb.stu; 				# 查看表头结构
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

6 修改表

命令格式: alter table 库名.表名 操作命令

1.修改表名 rename

1.修改表名 rename  
mysql> alter table studb.stu rename studb.stuinfo;     # 修改表名

2.删除表头 drop

2.1 删除表头  drop
mysql> alter table studb.stuinfo drop age ;  		# 删除字段
2.2 一起删除多个表头
#  mysql> alter table  studb.stuinfo  drop school,drop 班级,drop email;
mysql> use studb;

Database changed
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
+-----------------+


mysql> desc stuinfo;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name   | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+

3.添加新表头 add

3.添加新表头  add
mysql> alter table studb.stuinfo add  mail  char(30) ; 		# 添加在末尾

添加在指定位置 first添加到表头 after 表头名添加到…之后

mysql> alter table  studb.stuinfo  add  number  char(9)  first , add  school char(10)  after name;

mysql> desc studb.stuinfo; 查看表结构
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| school | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
| mail   | char(30) | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+

4 .修改表头存储数据的 数据类型 modify

4.1修改表头存储数据的 数据类型 modify
mysql> alter table  studb.stuinfo      # 修改字段类型
    -> modify
    -> mail varchar(50) not null default "plj@tedu.cn";
    
mysql> desc studb.stuinfo;
+--------+-------------+------+-----+-------------+-------+
| Field  | Type        | Null | Key | Default     | Extra |
+--------+-------------+------+-----+-------------+-------+
| number | char(9)     | YES  |     | NULL        |       |
| name   | char(10)    | YES  |     | NULL        |       |
| school | char(10)    | YES  |     | NULL        |       |
| class  | char(9)     | YES  |     | NULL        |       |
| gender | char(4)     | YES  |     | NULL        |       |
| mail   | varchar(50) | NO   |     | plj@tedu.cn |       |
+--------+-------------+------+-----+-------------+-------+

4.2 使用modify  修改表头的位置
mysql>alter  table studb.stuinfo  modify mail char(50)  after name ;
mysql> desc studb.stuinfo;                                            
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| number | char(9)  | YES  |     | NULL    |       |
| name   | char(10) | YES  |     | NULL    |       |
| mail   | char(50) | YES  |     | NULL    |       |
| school | char(10) | YES  |     | NULL    |       |
| class  | char(9)  | YES  |     | NULL    |       |
| gender | char(4)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+

5.修改表头名 change

5.修改表头名 change
mysql> alter table studb.stuinfo change  class class_name char(9) ; # 修改表头名
mysql> desc studb.stuinfo;			# 查看修改
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| number     | char(9)  | YES  |     | NULL    |       |
| name       | char(10) | YES  |     | NULL    |       |
| mail       | char(50) | YES  |     | NULL    |       |
| school     | char(10) | YES  |     | NULL    |       |
| class_name | char(9)  | YES  |     | NULL    |       |
| gender     | char(4)  | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+

7 复制表

作用: 备份已有的表

1.表头和数据都复制

命令格式:create table 库名.表名 select * from 库名.表名 ;

mysql> use studb;
mysql> show tables;

mysql> create table studb.user select * from tarena.user;  
# 将tarena.user备份到studb.user
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
| user            |
+-----------------+
2 rows in set (0.00 sec)

2.仅仅复制表头命令格式:(只复制表结构)

命令格式: CREATE TABLE 库名.表名 LIKE 库名.表名

mysql> use studb;
mysql> show tables;
+-----------------+
| Tables_in_studb |
+-----------------+
| stuinfo         |
| user            |
+-----------------+

mysql> create table studb.user2  like tarena.user;  # 仅仅复制表头

mysql> select  * from studb.user2;
Empty set (0.00 sec)
mysql> desc studb.user2;
# 有表头结构,没有数据

8 管理表记录

对表中存储的行做管理 ,

操作包括:

​ 查看 select

​ 插入 insert into

​ 更新 update

​ 删除 delete

1.插入表记录

1.1 不指定列名插入记录(必须给所有列赋值)
insert  into  库名.表名  values (值列表); 		    	# 插入1行
insert  into  库名.表名  values (值列表),(值列表)...;   # 插入多行	
mysql> desc studb.stuinfo;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| number     | char(9)  | YES  |     | NULL    |       |
| name       | char(10) | YES  |     | NULL    |       |
| mail       | char(50) | YES  |     | NULL    |       |
| school     | char(10) | YES  |     | NULL    |       |
| class_name | char(9)  | YES  |     | NULL    |       |
| gender     | char(4)  | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
mysql> select * from studb.stuinfo;
Empty set (0.00 sec)

mysql> insert into studb.stuinfo values("1001","bob","123@tedu.cn","tarena","nsd2202","girl");  # 插入1行

mysql> insert into studb.stuinfo values
("1001","bob","123@tedu.cn","tarena","nsd2202","girl"), ("1003","tom","456@tedu.cn","tarena","nsd2202","girl"), ("1004","momo","112@tedu.cn","tarena","nsd2202","girl");		 # 插入多行	

mysql>  select  * from studb.stuinfo;
+--------+------+-------------+--------+------------+--------+
| number | name | mail        | school | class_name | gender |
+--------+------+-------------+--------+------------+--------+
| 1001   | bob  | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1001   | bob  | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1003   | tom  | 456@tedu.cn | tarena | nsd2202    | girl   |
| 1004   | momo | 112@tedu.cn | tarena | nsd2202    | girl   |
+--------+------+-------------+--------+------------+--------+
1.2 指定列名插入记录(仅需给指定列赋值)
insert  into  库名.表名(列名列表)  values (值列表); 		     # 插入1行
insert  into  库名.表名(列名列表)  values (值列表),(值列表)...;  # 插入多行	
mysql> insert into  studb.stuinfo(number,name) values("1002","john"); # 插入1行
mysql>  select  * from studb.stuinfo;
+--------+------+-------------+--------+------------+--------+
| number | name | mail        | school | class_name | gender |
+--------+------+-------------+--------+------------+--------+
| 1001   | bob  | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1001   | bob  | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1003   | tom  | 456@tedu.cn | tarena | nsd2202    | girl   |
| 1004   | momo | 112@tedu.cn | tarena | nsd2202    | girl   |
| 1002   | john | NULL        | NULL   | NULL       | NULL   |
+--------+------+-------------+--------+------------+--------+
5 rows in set (0.00 sec)
#----------------------------------------------------------------------#
mysql> insert into  studb.stuinfo(number,name) values("1005","jerry"),("1006","lili");								# 插入多行
mysql>  select  * from studb.stuinfo;                                 
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | girl   |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | girl   |
| 1002   | john  | NULL        | NULL   | NULL       | NULL   |
| 1005   | jerry | NULL        | NULL   | NULL       | NULL   |
| 1006   | lili  | NULL        | NULL   | NULL       | NULL   |
+--------+-------+-------------+--------+------------+--------+
7 rows in set (0.00 sec)
1.3 使用select查询结果赋值
insert  into  库名.表明(字段列表)  ( select  字段列表  from.where  条件);
mysql>  insert into studb.stuinfo(number,name) (select number,name from studb.stuinfo where name in ("bob","john","lili") );


mysql>  select  * from studb.stuinfo;                                 
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | girl   |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | girl   |
| 1002   | john  | NULL        | NULL   | NULL       | NULL   |
| 1005   | jerry | NULL        | NULL   | NULL       | NULL   |
| 1006   | lili  | NULL        | NULL   | NULL       | NULL   |
| 1007   | NULL  | NULL        | tarena | NULL       | boy    |
| 1001   | bob   | NULL        | NULL   | NULL       | NULL   |
| 1001   | bob   | NULL        | NULL   | NULL       | NULL   |
| 1002   | john  | NULL        | NULL   | NULL       | NULL   |
| 1006   | lili  | NULL        | NULL   | NULL       | NULL   |
+--------+-------+-------------+--------+------------+--------+
12 rows in set (0.00 sec)
1.4 使用set命令赋值
insert  into  库名.表名  set  字段=, 字段=, ;
mysql>  insert into studb.stuinfo set number="1007" , school="tarena", gender="boy";

mysql>  select  * from studb.stuinfo;                                 
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | girl   |
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | girl   |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | girl   |
| 1002   | john  | NULL        | NULL   | NULL       | NULL   |
| 1005   | jerry | NULL        | NULL   | NULL       | NULL   |
| 1006   | lili  | NULL        | NULL   | NULL       | NULL   |
| 1007   | NULL  | NULL        | tarena | NULL       | boy    |
+--------+-------+-------------+--------+------------+--------+
8 rows in set (0.00 sec)

2.修改表记录(更新数据)

更新 :修改行中列的数据 使用update

2.1批量修改 (不加筛选条件修改)

命令格式: update 库名.表名 set 字段名 = 值 , 字段名 = 值 ;

mysql> update studb.stuinfo set school="tarena",gender="no";

mysql> select * from studb.stuinfo;
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | no     |
| 1001   | bob   | 123@tedu.cn | tarena | nsd2202    | no     |
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | no     |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1005   | jerry | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
| 1007   | NULL  | NULL        | tarena | NULL       | no     |
| 1001   | bob   | NULL        | tarena | NULL       | no     |
| 1001   | bob   | NULL        | tarena | NULL       | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
+--------+-------+-------------+--------+------------+--------+
12 rows in set (0.00 sec)

2.2 仅修改与条件匹配
mysql> update studb.stuinfo set name="haha" where number="1001";

mysql> select * from studb.stuinfo;
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1001   | haha  | 123@tedu.cn | tarena | nsd2202    | no     |
| 1001   | haha  | 123@tedu.cn | tarena | nsd2202    | no     |
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | no     |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1005   | jerry | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
| 1007   | NULL  | NULL        | tarena | NULL       | no     |
| 1001   | haha  | NULL        | tarena | NULL       | no     |
| 1001   | haha  | NULL        | tarena | NULL       | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
+--------+-------+-------------+--------+------------+--------+
12 rows in set (0.00 sec)

3、删除 表中行 delete

格式:

仅删除符合条件的行(删除命令有筛选条件) 
delete  from  库名.表名  where  筛选条件;

删除表里的所有行(删除命令有筛选条件)    
delete   from  库名.表名;

`truncate  table 库名.表名; `       删除表里的记录

truncate 与 delete 删除记录的区别!!! (要知道 )

- TRUNCATE不支持WHERE条件

- 自增长列,TRUNCATE后从1开始;DELETE继续编号

- TRUNCATE不能回滚,DELETE可以

- 效率略高于DELETE

只删除与条件匹配的行

mysql> delete from studb.stuinfo where name="haha";
Query OK, 4 rows affected (0.04 sec)

mysql> select * from studb.stuinfo;
+--------+-------+-------------+--------+------------+--------+
| number | name  | mail        | school | class_name | gender |
+--------+-------+-------------+--------+------------+--------+
| 1003   | tom   | 456@tedu.cn | tarena | nsd2202    | no     |
| 1004   | momo  | 112@tedu.cn | tarena | nsd2202    | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1005   | jerry | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
| 1007   | NULL  | NULL        | tarena | NULL       | no     |
| 1002   | john  | NULL        | tarena | NULL       | no     |
| 1006   | lili  | NULL        | tarena | NULL       | no     |
+--------+-------+-------------+--------+------------+--------+
8 rows in set (0.00 sec)

删除所有行

mysql> delete from studb.stuinfo;
Query OK, 8 rows affected (0.04 sec)

mysql> select * from studb.stuinfo;
Empty set (0.00 sec)

二、数据类型

MySQL帮助文档

1、数值类型

(1)整数类型

仅存储数值的整数部分

类型名称有符号范围无符号范围
tinyint微小整数-128 ~ 1270~255
smallint小整数-32768~327670~65535
mediumint中整数-2^23 ~ 2^23-10~ 2^24-1
int大整数-231~231-10~2^32-1
bigint极大整数-263~263-10~2^64-1
unsigned使用无符号存储范围

(2)浮点类型(能存储小数的类型)

在这里插入图片描述

# level 游戏级别   money   游戏币的钱
mysql> create table studb.t1(level tinyint unsigned,money double);
Query OK, 0 rows affected (0.14 sec)

mysql> desc studb.t1;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| level | tinyint(3) unsigned | YES  |     | NULL    |       |
| money | double              | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into studb.t1 values(80,88);			# 在存储的范围内
Query OK, 1 row affected (0.04 sec)

mysql> insert into studb.t1 values(301,1.29);		# 超出字段level 的存储范围报错
ERROR 1264 (22003): Out of range value for column 'level' at row 1
mysql> insert into studb.t1 values(255,1.29);		# 在存储范围内
Query OK, 1 row affected (0.04 sec)

mysql> insert into studb.t1 values(1.25,7.25);		# 整数类型 不存储小数位
Query OK, 1 row affected (0.04 sec)

mysql> select * from studb.t1;
+-------+-------+
| level | money |
+-------+-------+
|    80 |    88 |
|   255 |  1.29 |
|     1 |  7.25 |
+-------+-------+
3 rows in set (0.00 sec)

查看服务自带的表的表结构使用的数据类型

mysql>  desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| ....                   | ........                          | ..   | ... |                       |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| .......                | ......                            | ...  |     | ....                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+

2、字符类型

(表头下存储的是汉字或者是英文字母)

(1)常用字符类型

类型名称存储范围
char(字符个数)定长字符类型(固定长度)1-255字符
varchar(字符个数)变长(长度不固定)1-65535字符(有效存储范围到65532)
一个英文字母  是一个字符
一个汉字     也是一个字符
1) char和varchar的异同

char 和 varchar 共同点 都不能超出指定的字符个数

char 和 varchar 不同点 存储的字符个数小于指定的字符个数时处理的方式不一样,

具体如下:

host  char(3)
a     补2个空格 凑够定义字符个数3
ab    补1个空格 凑够定义字符个数3
abc   正好够定义字符个数3 不补空格
adbc  超出了定义字符个数3 报错不让存

address  varchar(3) 
a    不会补空格 直接就存a
ab   不会补空格 直接就存ab
abc  不会补空格 直接就存abc
adbc 超出了定义字符个数3 报错不让存


mysql> create table studb.t2(name char(3),address varchar(5));
Query OK, 0 rows affected (0.19 sec)

mysql> desc studb.t2;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| name    | char(3)    | YES  |     | NULL    |       |
| address | varchar(5) | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into studb.t2 values("a","a");
Query OK, 1 row affected (0.06 sec)

mysql> insert into studb.t2 values("ab","ab");
Query OK, 1 row affected (0.05 sec)

mysql> insert into studb.t2 values("abc","abc");
Query OK, 1 row affected (0.06 sec)

mysql> insert into studb.t2 values("abcd","abcd");
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into studb.t2 values("abc","abcde");
Query OK, 1 row affected (0.04 sec)

mysql> insert into studb.t2 values("abc","abcdef");
ERROR 1406 (22001): Data too long for column 'address' at row 1
mysql> select * from studb.t2;
+------+---------+
| name | address |
+------+---------+
| a    | a       |
| ab   | ab      |
| abc  | abc     |
| abc  | abcde   |
+------+---------+
4 rows in set (0.00 sec)
2) 默认不允许 给表头存储中文 要存储中文 建表是 要指定表使用中文字符集
# 查看表使用的字符集
mysql> show create table studb.t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `level` tinyint(3) unsigned DEFAULT NULL,
  `money` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

#  说明 :
# ENGINE=InnoDB             定义存储引擎(存储引擎后边会讲) 
# DEFAULT   CHARSET=latin1  定义字符集 (默认字符集是 latin1  西方国家使用的字符编码)
建表时指定表使用的字符集 utf8
# 建表时指定表使用的字符集 utf8 
mysql> create  table  studb.t3( name  char(3) , address  varchar(10) )  default  charset  utf8;

mysql> show create table studb.t3 \G
*************************** 1. row ***************************
       Table: t3
Create Table: CREATE TABLE `t3` (
  `name` char(3) DEFAULT NULL,
  `address` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> desc studb.t3;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | char(3)     | YES  |     | NULL    |       |
| address | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into studb.t3 values ("张翠山","武当山");
Query OK, 1 row affected (0.02 sec)

mysql> insert into studb.t3 values ("张真人","武当山");
Query OK, 1 row affected (0.03 sec)

mysql> select  * from studb.t3;
+-----------+-----------+
| name      | address   |
+-----------+-----------+
| 张翠山    | 武当山    |
| 张真人    | 武当山    |
+-----------+-----------+
2 rows in set (0.00 sec)

(2)其他字符类型

通常用来存储视频、音频、图片、较大的文本…

类型名称范围
tinytext短文本0-255字节
tinyblob二进制形式短文本0-255字节
text长文本数据0-65535字节
blob二进制形式的长文本0-65535字节
mediumblob二进制形式的中等长度文本0-16777215字节
mediumtext中等长度文本数据0-16777215字节
longblob二进制形式极大文本0-4284867295字节
longtext极大文本0-4284867295字节

3、枚举类型

给表头赋值时 ,值必须在类型规定的范围内选择

单选 enum(值1,值2,值3 …)

多选 set(值1,值2,值3 …)

mysql> create table studb.t8(
    姓名 char(10), 
    性别 enum("男","女","保密"), 
    爱好 set("吃","睡")
)default charset utf8;
Query OK, 0 rows affected (0.42 sec)

mysql> desc studb.t8;
+--------+----------------------------+------+-----+---------+-------+
| Field  | Type                       | Null | Key | Default | Extra |
+--------+----------------------------+------+-----+---------+-------+
| 姓名   | char(10)                    | YES  |     | NULL    |      |
| 性别   | enum('男','女','保密')       | YES  |     | NULL    |       |
| 爱好   | set('吃','睡')              | YES  |      | NULL    |      |
+--------+----------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


mysql>  insert into studb.t8 values ("小包总","男人","帅哥,睡,金钱");
ERROR 1265 (01000): Data truncated for column '性别' at row 1
mysql>  insert into studb.t8 values ("小w","男","睡");
Query OK, 1 row affected (0.04 sec)
mysql>  insert into studb.t8 values ("盈盈","女","吃,睡");
Query OK, 1 row affected (0.04 sec)


mysql> select * from studb.t8;
+--------+--------+---------+
| 姓名   | 性别   | 爱好      |
+--------+--------+---------+
| 小w    |||
| 盈盈   ||,|
+--------+--------+---------+
2 rows in set (0.00 sec)

4、日期时间类型

(1)表头存储与日期时间格式的数据

类型名称范围赋值形式
year1901~2155YYYY
date日期0001-01-01~9999-12-31YYYYMMDD
time时间01:00:00~23:59:59HHMMSS
datetime日期时间1000-01-01 00:00:00~9999-12-31 23:59:59YYYYMMDDHHMMSS
timestamp日期时间1970-01-01 00:00:00~2038-01-19 00:00:00YYYYMMDDHHMMSS
mysql> create table studb.t6(
    -> 姓名 char(10),
    -> 生日 date,
    -> 出生年份 year,
    -> 家庭聚会 datetime,
    -> 聚会地点 varchar(15),
    -> 上班时间 time) default charset utf8;
Query OK, 0 rows affected (0.22 sec)

mysql> desc studb.t6;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名         | char(10)    | YES  |     | NULL    |       |
| 生日         | date        | YES  |     | NULL    |       |
| 出生年份     | year(4)     | YES  |     | NULL    |       |
| 家庭聚会     | datetime    | YES  |     | NULL    |       |
| 聚会地点     | varchar(15) | YES  |     | NULL    |       |
| 上班时间     | time        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> insert into studb.t6 values
    -> ("铁子",20220606,1997,20220607183000,"郑州",090000);
Query OK, 1 row affected (0.03 sec)

mysql> insert into studb.t6(姓名,出生年份)values("憨憨",23),("端端",80);
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

# 使用2位数给year的表头赋值也是可以的  但会自动补全4位数
# 01-69  之间的数字使用20补全4位数的年 2001~2069
# 70-99  之间的数字使用19补全4位数的年 1970~1999
mysql> select * from studb.t6;
+--------+------------+--------------+---------------------+--------------+--------------+
| 姓名   | 生日       | 出生年份     | 家庭聚会            | 聚会地点     | 上班时间     |
+--------+------------+--------------+---------------------+--------------+--------------+
| 铁子   | 2022-06-06 |         1997 | 2022-06-07 18:30:00 | 郑州         | 09:00:00     |
| 憨憨   | NULL       |         2023 | NULL                | NULL         | NULL         |
| 端端   | NULL       |         1980 | NULL                | NULL         | NULL         |
+--------+------------+--------------+---------------------+--------------+--------------+
3 rows in set (0.00 sec)

(2)datetime 与 timestamp 的区别?

1)第一个区别是存储范围不一样

​ (datetime存储范围大 timestamp范围小)

​ 存储数据的方式不一样

2)第二个区别
timestamp类型    不赋值 使用系统时间自动赋值

datetime类型     不赋值 使用null 赋值 
mysql>  create   table  studb.t7(聚会时间   datetime , 开会时间  timestamp );
Query OK, 0 rows affected (0.25 sec)

mysql> desc studb.t7;
+--------------+-----------+------+-----+-------------------+-----------------------------+
| Field        | Type      | Null | Key | Default           | Extra                       |
+--------------+-----------+------+-----+-------------------+-----------------------------+
| 聚会时间     | datetime  | YES  |     | NULL              |                             |
| 开会时间     | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)


mysql> system date
20220607日 星期二 20:04:31 CST

mysql>  insert into studb.t7(聚会时间) values (20211224223000);
Query OK, 1 row affected (0.03 sec)

mysql>  insert into studb.t7(开会时间) values (20220101093000);
Query OK, 1 row affected (0.05 sec)

mysql> select  * from  studb.t7;
+---------------------+---------------------+
| 聚会时间            | 开会时间            |
+---------------------+---------------------+
| 2021-12-24 22:30:00 | 2022-06-07 20:04:55 |
| NULL                | 2022-01-01 09:30:00 |
+---------------------+---------------------+
2 rows in set (0.00 sec)

三、数据批量处理

(一次性向表里存储很多数据或一次性把表里的数据都取出来)

检索目录: 数据导入或导出,存放数据的文件必须在mysql服务要求的目录下

首先:要知道数据库服务默认的检索目录

#查看默认的检索目录

mysql> show variables like  "secure_file_priv";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv  | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)
mysql> exit

[root@host50 ~]# ls -l /var/lib/mysql-files/
总用量 0
[root@host50 ~]# ls -ld /var/lib/mysql-files/
drwxr-x--- 2 mysql mysql 6 11月 29 2016 /var/lib/mysql-files/
[root@host50 ~]#			 

其次:修改数据库服务默认的检索目录

[root@host50 ~]# vim /etc/my.cnf
[mysqld]
secure_file_priv=/myload      #手动添加
:wq
[root@host50 ~]# mkdir /myload
[root@host50 ~]# chown mysql /myload/
[root@host50 ~]# ls -ld /myload/
drwxr-xr-x 2 mysql root 6 115 16:37 /myload/
[root@host50 ~]# setenforce 0
setenforce: SELinux is disabled
[root@host50 ~]# systemctl  restart mysqld
[root@host50 ~]# mysql -uroot -p123456
mysql> show variables like  "secure_file_priv";
+------------------+----------+
| Variable_name    | Value      |
+------------------+----------+
| secure_file_priv   | /myload/ |
+------------------+----------+
1 row in set (0.00 sec)

1、数据导入

(一次性向表里存储很多数据)

把系统文件的内容存储到数据库服务的表里 文件的内容要规律

数据导入格式:

mysql>  load   data  infile   "/检索目录/文件名"   into  table    库名.表名   
fields  terminated by  "文件中列的间隔符号"   
lines   terminated by   "\n"  ;

数据导入的操作步骤:

诉求:将/etc/passwd文件导入db1库的t3表里	
1) 要创建存储数据库(如果没有的话)
2) 建表 (根据导入文件的内容 创建 表头名  表头个数  表头数据类型  根据文件内容定义)
3) 把系统文件拷贝的检索目录里
4)  数据库管理执行导入数据的命令
5) 查看数据
mysql> create database if not exists db1;
Query OK, 1 row affected (0.00 sec)

mysql> drop table db1.t3;
ERROR 1051 (42S02): Unknown table 'db1.t3'
mysql> create table db1.t3(
    -> name char(50),password char(1),
    -> uid int, gid int,comment varchar(200),
    -> homedir varchar(60),shell varchar(30));
Query OK, 0 rows affected (0.31 sec)

mysql> desc db1.t3;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| name     | char(50)     | YES  |     | NULL    |       |
| password | char(1)      | YES  |     | NULL    |       |
| uid      | int(11)      | YES  |     | NULL    |       |
| gid      | int(11)      | YES  |     | NULL    |       |
| comment  | varchar(200) | YES  |     | NULL    |       |
| homedir  | varchar(60)  | YES  |     | NULL    |       |
| shell    | varchar(30)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

mysql> select * from db1.t3;
Empty set (0.00 sec)

mysql> system cp /etc/passwd /myload/
mysql> system ls /myload
passwd
mysql> load data infile"/myload/passwd" into table db1.t3
    -> fields terminated by ":"
    -> lines terminated by "\n";
Query OK, 22 rows affected (0.05 sec)
Records: 22  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from db1.t3;

2、数据导出

(一次性把表里的数据都取出来)

​ 1)把数据库服务的表里数据保存到系统文件里。

​ 2)注意导出的数据不包括表头名 ,只有表里的行。

​ 3)存放导出数据的文件名 不需要事先创建且具有唯一。

数据导出命令格式 1

select   字段名列表 from.where  条件  into  outfile   "/检索命令名/文件名" ;

数据导出命令格式 2

select   字段名列表 from.where  条件  
into  outfile   "/检索命令名/文件名"  fields  terminated by  "列间隔符号"# fields  terminated by  文件中的列的间隔符号,不指定默认是一个 tab 键的宽度

数据导出命令格式 3

select   字段名列表 from.where  条件  into  outfile   "/检索命令名/文件名"  fields  terminated by  "列间隔符号"    lines     terminated by  "行间隔符号"##	# lines terminated by 文件中行间隔符号,不指定默认一条记录就是文件中的1行
数据导出例子
# 1. 格式一
mysql> select * from db1.t3 where uid<=4 into outfile "/myload/a.txt"; 
Query OK, 5 rows affected (0.01 sec)

mysql> system ls /myload
a.txt  passwd
# 2. 格式二
mysql> select name,homedir,uid from db1.t3 where uid<=10 into outfile "/myload/b.txt" fields terminated by ":";
Query OK, 9 rows affected (0.00 sec)

mysql> system cat /myload/b.txt
root:/root:0
bin:/bin:1
daemon:/sbin:2
adm:/var/adm:3
lp:/var/spool/lpd:4
sync:/sbin:5
shutdown:/sbin:6
halt:/sbin:7
mail:/var/spool/mail:8
# 3. 格式三
mysql> select name,homedir,uid from db1.t3 where uid<=10 into outfile "/myload/c.txt" fields terminated by ":" lines terminated by "!!!";
Query OK, 9 rows affected (0.00 sec)

mysql> system cat /myload/c.txt
root:/root:0!!!bin:/bin:1!!!daemon:/sbin:2!!!adm:/var/adm:3!!!lp:/var/spool/lpd:4!!!sync:/sbin:5!!!shutdown:/sbin:6!!!halt:/sbin:7!!!mail:/var/spool/mail:8!!!mysql> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值