mysql数据类型、数据的导入导出

      数据类型分类:数值类型   字符类型   日期时间类型   枚举类型

		    每种类型都有对应的关键字表示 和具体的存储范围 及 存储空间

比如存储: 身高 、 体重  、 工资  、  奖金 适合使用数值类型 

比如存储: 姓名 、  家庭地址 、 收货地址   适合使用字符类型 

比如存储: 生日 、  出生年份 、 入职时间  、  下班时间 、 注册时间   适合使用日期时间

比如存储: 爱好 、  性别 、 社保医院   适合使用枚举类型


数值类型   :表头下可以存储数据   
			整数类型(能存储正整数和负整数的类型) 例如  23(正整数)    -23(负整数)
			         每种整数类型分为无符号存储范围和有符号存储范围	 
			
			       无符号存储范围起始数字从 数字零开始

			       有符号存储范围  就是可以存储负数
		        使用unsigned 命令定义使用数值类型的无符号存储范围
			整数类型不存储小数,如果数字有小数的话会把小数部分四舍五入后只保存整数部分

			浮点类型(能存储小数的类型)  例如  23.22 

 

浮点类型:

 

level 游戏级别   money   游戏币的钱
mysql> create table  studb.t1(level  tinyint unsigned ,  money  double  );   休息到 17:05  
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.01 sec)

mysql> insert into studb.t1  values (80,88);   在存储的范围内

mysql> insert into studb.t1  values (301,1.292);  超出字段level 的存储范围报错
ERROR 1264 (22003): Out of range value for column 'level' at row 1

mysql> insert into studb.t1  values (255,1.292);  在存储范围内
Query OK, 1 row affected (0.02 sec)

mysql> insert into studb.t1  values (1.292,6.78);   整数类型 不存储小数位 
Query OK, 1 row affected (0.03 sec)

mysql> select  * from studb.t1;
+-------+-------+
| level | money |
+-------+-------+
|    80 |    88 |
|   255 | 1.292 |
|     1 |  6.78 |
+-------+-------+

查看服务自带的表的表结构使用的数据类型 (可以看明白)

mysql> desc mysql.user;  
  max_questions            | int(11) unsigned                
  max_updates              | int(11) unsigned                  
  max_connections          | int(11) unsigned                  
  max_user_connections     | int(11) unsigned 
  password_lifetime        | smallint(5) unsigned 

 字符类型:

其他字符:

 

 

字符类型    (表头下存储的是汉字或者是英文字母)
		char(字符个数)    定长字符类型(固定长度)     存储范围 1-255字符
		varchar(字符个数) 变长      (长度不固定)     存储范围 1-65535字符 (有效存储范围到65532)
				
一个英文字母 是一个字符
一个汉字也是一个字符

  
	       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) );
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.02 sec)

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

mysql> insert into studb.t2 values ("abc","abc");
Query OK, 1 row affected (0.01 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","abcd");
Query OK, 1 row affected (0.05 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  | abcd    |
+------+---------+
4 rows in set (0.00 sec)


默认不允许 给表头存储中文  要存储中文 建表是 要指定表使用中文字符集

#查看表使用的字符集

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  
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)

修改的表使用的字符集    alter  table   库名.表   DEFAULT CHARSET=utf8 ;

mysql> create  database  if  not  exists  db1;

mysql> create table   db1.t5(id int,name char(10)); 没指定字符集 默认是latin1 

mysql> show  create table   db1.t5   \G  查看 
*************************** 1. row ***************************
       Table: t5
Create Table: CREATE TABLE `t5` (
  `id` int(11) DEFAULT NULL,
  `name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> alter table db1.t5 DEFAULT CHARSET utf8;   把表使用的字符集修改为utf8

mysql> show  create table   db1.t5 \G  再次查看
*************************** 1. row ***************************
       Table: t5
Create Table: CREATE TABLE `t5` (
  `id` int(11) DEFAULT NULL,
  `name` char(10) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)



枚举类型:

 

 

枚举类型    给表头赋值时 ,值必须在类型规定的范围内选择
单选    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.21 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 ("小包总","男","美女,睡,金钱");
ERROR 1265 (01000): Data truncated for column '爱好' at row 1
mysql> 
mysql> 
mysql> insert into studb.t8 values ("丫丫","女","帅哥,吃");
Query OK, 1 row affected (0.02 sec)

mysql> select  * from studb.t8;
+--------+--------+------------+
| 姓名   | 性别   | 爱好       |
+--------+--------+------------+
| 丫丫   | 女     | 帅哥,吃    |
+--------+--------+------------+
1 row in set (0.00 sec)

mysql> 

日期类型:

 

 

日期时间类型  表头存储与日期时间格式的数据
年        year       YYYY     2021
日期    date        YYYYMMDD    20211104
时间    time       HHMMSS         143358        

日期时间(既有日期又有时间)  
datetime   或  timestamp       YYYYMMDDHHMMSS     20211104143648

mysql> create table studb.t6( 姓名  char(10), 生日  date , 出生年份 year , 家庭聚会  datetime , 
聚会地点  varchar(15), 上班时间 time)default charset utf8;


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 ("翠华",20211120,1990,20220101183000,"天坛校区",090000);

 使用2位数给year的表头赋值也是可以的  但会自动补全4位数
 01-69  之间的数字使用20补全4位数的年 2001~2069
 70-99  之间的数字使用19补全4位数的年 1970~1999

mysql> insert into studb.t6(姓名,出生年份) values ("狗剩",53),("铁头娃",81);
Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select  * from  studb.t6;
+-----------+------------+--------------+---------------------+--------------+--------------+
| 姓名      | 生日       | 出生年份     | 家庭聚会            | 聚会地点     | 上班时间     |
+-----------+------------+--------------+---------------------+--------------+--------------+
| 翠华      | 2021-11-20 |         1990 | 2022-01-01 18:30:00 | 天坛校区     | 09:00:00     |
| 狗剩      | NULL       |         2053 | NULL                | NULL         | NULL         |
| 铁头娃    | NULL       |         1981 | NULL                | NULL         | NULL         |
+-----------+------------+--------------+---------------------+--------------+--------------+
3 rows in set (0.00 sec)

mysql> 

datetime   与  timestamp  的区别?
		第一个区别是存储范围不一样 (datetime存储范围大  timestamp范围小)

	        存储数据的方式不一样
                演示:

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    # 使用 system 可以在mysql 提示符下执行 操作系统命令   
2021年 11月 05日 星期五 15:24:12 CST

timestamp类型      不赋值 使用系统时间自动赋值
datetime类型         不赋值  使用null  赋值 

mysql> system date
2021年 12月 08日 星期三 09:46:45 CST
mysql> insert into studb.t7(聚会时间) values (20211224223000);

mysql> insert into studb.t7(开会时间) values (20220101093000);

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

mysql> 

数据导入导出

检索目录:保存数据的文件 必须存储在要求的目录下才可以

导入数据  把系统文件的内容存储到表里

导出数据  把记录存储到系统文件里

 修改目录:

案例3:数据批量处理  (一次性向表里存储很多数据或一次性把表里的数据都取出来)
             注意:数据导入或导出 存放数据的文件必须在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 11月  5 16:37 /myload/
[root@host50 ~]# setenforce 0
setenforce: SELinux is disabled
[root@host50 ~]# systemctl  restart mysqld
[root@host50 ~]# mysql -uroot -p123qqq...B
mysql> show variables like  "secure_file_priv";
+------------------+----------+
| Variable_name    | Value      |
+------------------+----------+
| secure_file_priv   | /myload/ |
+------------------+----------+
1 row in set (0.00 sec)
 
 

数据导入(一次性向表里存储很多数据)把系统文件的内容存储到数据库服务的表里

文件的内容要规律

诉求:将/etc/passwd文件导入db1库的t3表里

数据导入格式:

mysql> load data infile "/检索目录/文件名" into table 库名.表名

fields terminated by "文件中列的间隔符号" lines terminated by "\n" ;

数据导入的操作步骤:

1) 要创建存储数据库(如果没有的话)

2) 建表 (根据导入文件的内容 创建 表头名 表头个数 表头数据类型 根据文件内容定义)

3) 把系统文件拷贝的检索目录里

4 ) 数据库管理执行导入数据的命令

5) 查看数据

 

 

mysql> create database if not exists db1;			 
mysql> drop  table db1.t3;		 #删除重名的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) );

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.00 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" ;

mysql> select * from db1.t3 ;
+-----------------+----------+------+------+-----------------------------------------------------------------+------------------+----------------+
| name            | password | uid  | gid  | comment                                                         | homedir          | shell          |
+-----------------+----------+------+------+-----------------------------------------------------------------+------------------+----------------+
| root            | x        |    0 |    0 | root                                                            | /root            | /bin/bash      |
| bin             | x        |    1 |    1 | bin                                                             | /bin             | /sbin/nologin  |
| daemon          | x        |    2 |    2 | daemon                                                          | /sbin            | /sbin/nologin  |
| adm             | x        |    3 |    4 | adm                                                             | /var/adm         | /sbin/nologin  |
| lp              | x        |    4 |    7 | lp                                                              | /var/spool/lpd   | /sbin/nologin  |
| sync            | x        |    5 |    0 | sync                                                            | /sbin            | /bin/sync      |
| shutdown        | x        |    6 |    0 | shutdown                                                        | /sbin            | /sbin/shutdown |
| halt            | x        |    7 |    0 | halt                                                            | /sbin            | /sbin/halt     |
| mail            | x        |    8 |   12 | mail                                                            | /var/spool/mail  | /sbin/nologin  |
| operator        | x        |   11 |    0 | operator                                                        | /root            | /sbin/nologin  |
| games           | x        |   12 |  100 | games                                                           | /usr/games       | /sbin/nologin  |
| ftp             | x        |   14 |   50 | FTP User                                                        | /var/ftp         | /sbin/nologin  |
| nobody          | x        |   99 |   99 | Nobody                                                          | /                | /sbin/nologin  |
| systemd-network | x        |  192 |  192 | systemd Network Management                                      | /                | /sbin/nologin  |
| dbus            | x        |   81 |   81 | System message bus                                              | /                | /sbin/nologin  |
| polkitd         | x        |  999 |  998 | User for polkitd                                                | /                | /sbin/nologin  |
| tss             | x        |   59 |   59 | Account used by the trousers package to sandbox the tcsd daemon | /dev/null        | /sbin/nologin  |
| sshd            | x        |   74 |   74 | Privilege-separated SSH                                         | /var/empty/sshd  | /sbin/nologin  |
| chrony          | x        |  998 |  996 |                                                                 | /var/lib/chrony  | /sbin/nologin  |
| tcpdump         | x        |   72 |   72 |                                                                 | /                | /sbin/nologin  |
| mysql           | x        |   27 |   27 | MySQL Server                                                    | /var/lib/mysql   | /bin/false     |
| apache          | x        |   48 |   48 | Apache                                                          | /usr/share/httpd | /sbin/nologin  |
+-----------------+----------+------+------+-----------------------------------------------------------------+------------------+----------------+
22 rows in set (0.00 sec)

            
            

      
数据导出(一次性把表里的数据都取出来)把数据库服务的表里数据保存到系统文件里
注意导出的数据不包括表头名 ,只有表里行。存放导出数据的文件名 不需要事先创建
且具有唯一。

            
数据导出命令格式:

  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行

 

 

 





mysql> system ls /myload
passwd
mysql> select * from db1.t3  where  uid <= 10   into  outfile  "/myload/a.txt";
Query OK, 9 rows affected (0.00 sec)

mysql> system ls /myload
a.txt  passwd
mysql> 
mysql> system cat  /myload/a.txt ;
root    x       0       0       root    /root   /bin/bash
bin      x       1       1       bin     /bin    /sbin/nologin
daemon  x       2       2       daemon  /sbin   /sbin/nologin
adm     x       3       4       adm     /var/adm        /sbin/nologin
lp      x       4       7       lp      /var/spool/lpd  /sbin/nologin
sync    x       5       0       sync    /sbin   /bin/sync
shutdown        x       6       0       shutdown        /sbin   /sbin/shutdown
halt    x       7       0       halt    /sbin   /sbin/halt
mail    x       8       12      mail    /var/spool/mail /sbin/nologin
mysql> 


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
mysql> 

mysql> select name , homedir , uid  from db1.t3  where  uid <= 10  into outfile "/myload/c.txt"
fields  terminated by ":"   lines  terminated by "!!!" ;
	
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> 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值