Top
NSD DBA DAY04
- 案例1:表管理
- 案例2:數據類型
- 案例3:數據批量處理
- 案例4:表頭基本約束
1 案例1:表管理
1.1 問題
- 建庫練習
- 建表練習
- 修改表練習
1.2 方案
在MySQL50主機完成練習。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:建庫練習
庫名命名規則:
僅可以使用數字、字母、下劃線、不能純數字
區分字母大小寫,
具有唯一性
不可使用MySQL命令或特殊字符
命令操作如下所示:
- //庫名區分字母大小寫
- mysql> create database gamedb ;
- Query OK, 1 row affected (0.14 sec)
- mysql> create database GAMEDB ;
- Query OK, 1 row affected (0.08 sec)
- mysql> create database GAMEDB ;
- ERROR 1007 (HY000): Can't create database 'GAMEDB'; database exists //重名報錯
- //加if not exists 命令避免重名報錯
- mysql> create database if not exists gamedb ;
- Query OK, 1 row affected, 1 warning (0.03 sec) //正常
- mysql> show databases; //查看創建的庫
- +--------------------+
- | Database |
- +--------------------+
- | GAMEDB |
- | gamedb |
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | tarena |
- +--------------------+
- 7 rows in set (0.00 sec)
- mysql> drop database gamedb; //刪除庫
- Query OK, 0 rows affected (0.11 sec)
- mysql> drop database gamedb; // 刪除沒有的庫報錯
- ERROR 1008 (HY000): Can’t drop database ‘gamedb’; database doesn’t exist
- //加if exists 刪除沒有的庫,也不報錯
- mysql> drop database if exists gamedb;
- Query OK, 0 rows affected, 1 warning (0.00 sec)
步驟二:建表練習
命令操作如下所示:
- mysql> create database 學生庫; //建庫
- Query OK, 1 row affected (0.11 sec)
- mysql> create table 學生庫.學生信息表( //建表
- -> 姓名 char(10),
- -> 班級 char(9),
- -> 性別 char(4),
- -> 年齡 int
- -> );
- Query OK, 0 rows affected (0.47 sec)
- mysql> use 學生庫; //進入庫
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> show tables; //查看表
- +---------------------+
- | Tables_in_學生庫 |
- +---------------------+
- | 學生信息表 |
- +---------------------+
- 1 row in set (0.00 sec)
- mysql> desc 學生信息表; //查看表頭
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | 姓名 | char(10) | YES | | NULL | |
- | 班級 | char(9) | YES | | NULL | |
- | 性別 | char(4) | YES | | NULL | |
- | 年齡 | int | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- //刪除表
- mysql> drop table 學生庫.學生信息表;
- //刪除庫
- mysql> drop database 學生庫;
使用英文命名,重新建庫、建表
- mysql> create database studb; //建庫
- Query OK, 1 row affected (0.11 sec)
- mysql> create table studb.stu( //建表
- -> name char(10),
- -> class char(9),
- -> gender char(4),
- -> age int
- -> );
- Query OK, 0 rows affected (1.17 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 | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
步驟三:修改表練習
命令操作如下所示:
- mysql> alter table studb.stu rename studb.stuinfo; //修改表名
- Query OK, 0 rows affected (0.28 sec)
- mysql> use studb; //進入庫
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
- Database changed
- mysql> show tables; //查看表
- +-----------------+
- | Tables_in_studb |
- +-----------------+
- | stuinfo |
- +-----------------+
- 1 row in set (0.00 sec)
- mysql> alter table studb.stuinfo drop age ; //刪除age表頭
- Query OK, 0 rows affected (0.52 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- 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 rows in set (0.00 sec)
- //添加表頭,默認添加在末尾
- mysql> alter table studb.stuinfo add mail char(30) ;
- Query OK, 0 rows affected (0.24 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表頭
- mysql> desc studb.stuinfo;
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | name | char(10) | YES | | NULL | |
- | class | char(9) | YES | | NULL | |
- | gender | char(4) | YES | | NULL | |
- | mail | char(30) | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- //first 把表頭添加首位
- //after 添加在指定表頭名的下方
- mysql> alter table studb.stuinfo add number char(9) first , add school char(10) after name;
- Query OK, 0 rows affected (0.48 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表結構
- 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 | |
- +--------+----------+------+-----+---------+-------+
- 6 rows in set (0.00 sec)
- //修改表頭數據類型
- mysql> alter table studb.stuinfo modify mail varchar(50);
- Query OK, 0 rows affected (1.17 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- 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) | YES | | NULL | |
- +--------+-------------+------+-----+---------+-------+
- 6 rows in set (0.01 sec)
- //修改表頭名
- mysql> alter table studb.stuinfo change class 班級 char(9) ;
- Query OK, 0 rows affected (0.12 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表頭
- 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 | |
- | 班級 | char(9) | YES | | NULL | |
- | gender | char(4) | YES | | NULL | |
- | mail | varchar(50) | YES | | NULL | |
- +--------+-------------+------+-----+---------+-------+
- 6 rows in set (0.00 sec)
- //一起刪除多個表頭
- mysql> alter table studb.stuinfo drop school , drop 班級 ,drop mail ;
- Query OK, 0 rows affected (0.73 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表頭
- mysql> desc studb.stuinfo;
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | number | char(9) | YES | | NULL | |
- | name | char(10) | YES | | NULL | |
- | gender | char(4) | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- mysql>
- //使用modify 修改表頭的位置
- mysql> alter table studb.stuinfo modify gender char(4) after number;
- Query OK, 0 rows affected (0.77 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表頭
- mysql> desc studb.stuinfo;
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | number | char(9) | YES | | NULL | |
- | gender | char(4) | YES | | NULL | |
- | name | char(10) | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- //再修改回原來位置
- mysql> alter table studb.stuinfo modify gender char(4) after name;
- Query OK, 0 rows affected (0.50 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- //查看表頭
- mysql> desc studb.stuinfo;
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | number | char(9) | YES | | NULL | |
- | name | char(10) | YES | | NULL | |
- | gender | char(4) | YES | | NULL | |
- +--------+----------+------+-----+---------+-------+
- 3 rows in set (0.01 sec)
復制表 (拷貝已有的表 和系統命令 cp 的功能一樣 )
- //復制tarena庫salary表到 studb庫 表名不變
- mysql> create table studb.salary select * from tarena.salary;
- Query OK, 8055 rows affected (2.66 sec)
- Records: 8055 Duplicates: 0 Warnings: 0
- //查看表頭,源表的key 不會被復制
- mysql> desc studb.salary;
- +-------------+------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------+------+------+-----+---------+-------+
- | id | int | NO | | 0 | |
- | date | date | YES | | NULL | |
- | employee_id | int | YES | | NULL | |
- | basic | int | YES | | NULL | |
- | bonus | int | YES | | NULL | |
- +-------------+------+------+-----+---------+-------+
- 5 rows in set (0.00 sec)
- //查看表行數
- mysql> select count(*) from studb.salary;
- +----------+
- | count(*) |
- +----------+
- | 8055 |
- +----------+
- 1 row in set (0.00 sec)
- //僅僅復制表頭
- mysql> create table studb.salary2 like tarena.salary;
- Query OK, 0 rows affected (0.95 sec)
- //查看表頭
- mysql> desc studb.salary2;
- +-------------+------+------+-----+---------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------+------+------+-----+---------+----------------+
- | id | int | NO | PRI | NULL | auto_increment |
- | date | date | YES | | NULL | |
- | employee_id | int | YES | MUL | NULL | |
- | basic | int | YES | | NULL | |
- | bonus | int | YES | | NULL | |
- +-------------+------+------+-----+---------+----------------+
- 5 rows in set (0.00 sec)
- //查看表行數
- mysql> select count(*) from studb.salary2;
- +----------+
- | count(*) |
- +----------+
- | 0 |
- +----------+
- 1 row in set (0.00 sec)
- mysql>
2 案例2:數據類型
2.1 問題
- 練習字符類型的使用
- 練習數值類型的使用
- 練習枚舉類型的使用
- 練習日期時間類型的使用
2.2 方案
常用數據類型:數值類型、字符類型、日期時間類型、枚舉類型,每種類型都有對應的命令表示、有具體的存儲范圍。
- 比如存儲: 身高、體重、工資、獎金,適合使用數值類型。
- 比如存儲: 姓名、家庭地址、收貨地址,適合使用字符類型。
- 比如存儲: 生日、出生年份、入職時間、下班時間、注冊時間,適合使用日期時間。
- 比如存儲: 愛好、性別、社保醫院,適合使用枚舉類型。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:練習字符類型的使用
命令操作如下所示:
- //建表
- mysql> create table studb.t2(name char(3) , address varchar(5) );
- Query OK, 0 rows affected (0.30 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.05 sec)
- mysql> insert into studb.t2 values ("ab","ab"); //正常
- Query OK, 1 row affected (0.08 sec)
- mysql> insert into studb.t2 values ("abc","abc");//正常
- Query OK, 1 row affected (0.04 sec)
- mysql> insert into studb.t2 values ("abcd","abcd"); //超出字符個數報錯
- ERROR 1406 (22001): Data too long for column 'name' at row 1
- mysql>
mysql8 建表默認支持中文字符集
- //查看字符集
- mysql> show create table studb.t2 \G
- *************************** 1. row ***************************
- Table: t2
- Create Table: CREATE TABLE `t2` (
- `name` char(3) DEFAULT NULL,
- `address` varchar(5) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
- 1 row in set (0.00 sec)
- 說明 :
- ENGINE=InnoDB 定義存儲引擎(存儲引擎課程里講)
- DEFAULT CHARSET=定義表使用的字符集
- //插入記錄
- mysql> insert into studb.t2 values ("張翠山","武當山");
- Query OK, 1 row affected (0.07 sec)
- //查看表記錄
- mysql> SELECT * FROM studb.t2;
- +-----------+-----------+
- | name | address |
- +-----------+-----------+
- | a | a |
- | ab | ab |
- | abc | abc |
- | 張翠山 | 武當山 |
- +-----------+-----------+
- 4 rows in set (0.00 sec)
步驟二:練習數值類型的使用
命令操作如下所示:
- name 姓名
- level 游戲級別
- money 游戲幣
- //建表
- mysql> create table studb.t1(name char(10) , level tinyint unsigned , money double );
- Query OK, 0 rows affected (0.72 sec)
- //查看表頭
- mysql> desc studb.t1;
- +-------+------------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+------------------+------+-----+---------+-------+
- | name | char(10) | YES | | NULL | |
- | level | tinyint unsigned | YES | | NULL | |
- | money | double | YES | | NULL | |
- +-------+------------------+------+-----+---------+-------+
- 3 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.292);
- ERROR 1264 (22003): Out of range value for column 'level' at row 1
- mysql>
- mysql> insert into studb.t1 values("獵人",255,1.292);
- Query OK, 1 row affected (0.06 sec)
- //整數類型 不存儲小數位
- mysql> insert into studb.t1 values ("英雄",1.292,6.78);
- Query OK, 1 row affected (0.07 sec)
- //查看表記錄
- mysql> select * from studb.t1 ;
- +--------+-------+-------+
- | name | level | money |
- +--------+-------+-------+
- | 法師 | 80 | 88 |
- | 獵人 | 255 | 1.292 |
- | 英雄 | 1 | 6.78 |
- +--------+-------+-------+
- 3 rows in set (0.00 sec)
步驟三:練習枚舉類型的使用
- //建表
- mysql> create table studb.t8(
- -> 姓名 char(10),
- -> 性別 enum("男","女","保密"),
- -> 愛好 set("帥哥","金錢","吃","睡")
- -> );
- Query OK, 0 rows affected (0.29 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.01 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> insert into studb.t8 values ("丫丫","女","帥哥,吃");
- Query OK, 1 row affected (0.09 sec)
- mysql> select * from studb.t8;
- +--------+--------+------------+
- | 姓名 | 性別 | 愛好 |
- +--------+--------+------------+
- | 丫丫 | 女 | 帥哥,吃 |
- +--------+--------+------------+
- 1 row in set (0.00 sec)
步驟四:練習日期時間類型的使用
命令操作如下所示:
- //建表
- mysql> create table studb.t6(
- -> 姓名 char(10),
- -> 生日 date ,
- -> 出生年份 year ,
- -> 家庭聚會 datetime ,
- -> 聚會地點 varchar(15),
- -> 上班時間 time
- -> );
- Query OK, 0 rows affected (0.25 sec)
- //查看表頭
- mysql> desc studb.t6 ;
- +--------------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+-------------+------+-----+---------+-------+
- | 姓名 | char(10) | YES | | NULL | |
- | 生日 | date | YES | | NULL | |
- | 出生年份 | year | 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);
- Query OK, 1 row affected (0.05 sec)
- //查看表記錄
- mysql> select * from studb.t6;
- +--------+------------+--------------+---------------------+--------------+--------------+
- | 姓名 | 生日 | 出生年份 | 家庭聚會 | 聚會地點 | 上班時間 |
- +--------+------------+--------------+---------------------+--------------+--------------+
- | 翠花 | 2021-11-20 | 1990 | 2022-01-01 18:30:00 | 天壇校區 | 09:00:00 |
- +--------+------------+--------------+---------------------+--------------+--------------+
- 1 row in set (0.00 sec)
3 案例3:數據批量處理
3.1 問題
- 修改檢索目錄為/myload。
- 將/etc/passwd文件導入db1庫的user3表里,并添加行號字段。
- 將db1庫user3表所有記錄導出, 存到/myload/user.txt文件里。
3.2 方案
在mysql50主機完成練習。
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:修改檢索目錄為/myload。
檢查目錄存放導入導出數據時存放數據的文件
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
- mysql> show variables like "%file%"; 查看與文件相關的配置項
- +---------------------------------------+---------------------------------+
- | Variable_name | Value |
- +---------------------------------------+---------------------------------+
- | character_set_filesystem | binary |
- | core_file | OFF |
- | ft_stopword_file | (built-in) |
- | general_log_file | /var/lib/mysql/mysql50.log |
- | init_file | |
- | innodb_buffer_pool_filename | ib_buffer_pool |
- | innodb_buffer_pool_in_core_file | ON |
- | innodb_data_file_path | ibdata1:12M:autoextend |
- | innodb_disable_sort_file_cache | OFF |
- | innodb_doublewrite_files | 2 |
- | innodb_file_per_table | ON |
- | innodb_log_file_size | 50331648 |
- | innodb_log_files_in_group | 2 |
- | innodb_open_files | 4000 |
- | innodb_temp_data_file_path | ibtmp1:12M:autoextend |
- | keep_files_on_create | OFF |
- | large_files_support | ON |
- | local_infile | OFF |
- | lower_case_file_system | OFF |
- | myisam_max_sort_file_size | 9223372036853727232 |
- | open_files_limit | 10000 |
- | performance_schema_max_file_classes | 80 |
- | performance_schema_max_file_handles | 32768 |
- | performance_schema_max_file_instances | -1 |
- | pid_file | /run/mysqld/mysqld.pid |
- | relay_log_info_file | relay-log.info |
- | secure_file_priv | /var/lib/mysql-files/ |
- | slow_query_log_file | /var/lib/mysql/mysql50-slow.log |
- +---------------------------------------+---------------------------------+
- 28 rows in set (0.00 sec)
- 查看默認檢索目錄
- mysql> show variables like "secure_file_priv";
- +------------------+-----------------------+
- | Variable_name | Value |
- +------------------+-----------------------+
- | secure_file_priv | /var/lib/mysql-files/ |
- +------------------+-----------------------+
- 1 row in set (0.00 sec)
- mysql> exit
- 安裝MySQL服務軟件時自動創建
- [root@mysql50 ~]# ls -ld /var/lib/mysql-files/
- drwxr-x--- 2 mysql mysql 6 Sep 22 2021 /var/lib/mysql-files/
- [root@mysql50 ~]#
- 修改主配置文件
- [root@mysql50 ~]# vim /etc/my.cnf.d/mysql-server.cnf
- [mysqld]
- secure_file_priv=/myload 添加此行
- :wq
- 創建目錄并修改所有者為mysql用戶 ,并保證mysql用戶對父目錄有rx
- [root@mysql50 ~]# mkdir /myload
- [root@mysql50 ~]# chown mysql /myload
- 關閉selinux
- root@mysql50 ~]# setenforce 0
- setenforce: SELinux is disabled
- 重啟服務
- [root@mysql50 ~]# systemctl restart mysqld
- 管理員員登陸查看目錄
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
- mysql> show variables like "secure_file_priv";
- +------------------+----------+
- | Variable_name | Value |
- +------------------+----------+
- | secure_file_priv | /myload/ |
- +------------------+----------+
- 1 row in set (0.01 sec)
步驟二:將/etc/passwd文件導入db1庫的user3表里。
命令操作如下所示:
- 建庫
- [root@mysql50 ~]# mysql -uroot -pNSD2023...a
- mysql> create database db1;
- 建表( 根據導入的文件內容 創建表頭)
- mysql> create table db1.user3(name varchar(30),password char(1),uid int , gid int , comment varchar(200),homedir varchar(50),shell varchar(30));
- Query OK, 0 rows affected (0.41 sec)
- 查看表頭
- mysql> desc db1.user3;
- +----------+--------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +----------+--------------+------+-----+---------+-------+
- | name | varchar(30) | YES | | NULL | |
- | password | char(1) | YES | | NULL | |
- | uid | int | YES | | NULL | |
- | gid | int | YES | | NULL | |
- | comment | varchar(200) | YES | | NULL | |
- | homedir | varchar(50) | YES | | NULL | |
- | shell | varchar(30) | YES | | NULL | |
- +----------+--------------+------+-----+---------+-------+
- 7 rows in set (0.01 sec)
- 沒有數據
- mysql> select * from db1.user3;
- Empty set (0.01 sec)
- mysql>
- 拷貝文件到檢索目錄 system 在MySQL 里執行系統命令
- mysql> system cp /etc/passwd /myload/
- mysql> system ls /myload/ 查看文件
- passwd
- mysql>
- 導入數據
- mysql> load data infile "/myload/passwd" into table db1.user3 fields terminated by ":" lines terminated by "\n" ;
- Query OK, 23 rows affected (0.06 sec)
- Records: 23 Deleted: 0 Skipped: 0 Warnings: 0
- 查看表記錄
- mysql> select count(*) from db1.user3;
- +----------+
- | count(*) |
- +----------+
- | 23 |
- +----------+
- 1 row in set (0.00 sec)
- mysql> select * from db1.user3;
- +------------------+----------+-------+-------+-----------------------------+-----------------+----------------+
- | 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 | 65534 | 65534 | Kernel Overflow User | / | /sbin/nologin |
- | dbus | x | 81 | 81 | System message bus | / | /sbin/nologin |
- | systemd-coredump | x | 999 | 997 | systemd Core Dumper | / | /sbin/nologin |
- | systemd-resolve | x | 193 | 193 | systemd Resolver | / | /sbin/nologin |
- | polkitd | x | 998 | 995 | User for polkitd | / | /sbin/nologin |
- | unbound | x | 997 | 994 | Unbound DNS resolver | /etc/unbound | /sbin/nologin |
- | tss | x | 59 | 59 | Account used for TPM access | /dev/null | /sbin/nologin |
- | chrony | x | 996 | 993 | | /var/lib/chrony | /sbin/nologin |
- | sshd | x | 74 | 74 | Privilege-separated SSH | /var/empty/sshd | /sbin/nologin |
- | tcpdump | x | 72 | 72 | | / | /sbin/nologin |
- | mysql | x | 27 | 27 | MySQL Server | /var/lib/mysql | /sbin/nologin |
- +------------------+----------+-------+-------+-----------------------------+-----------------+----------------+
- 23 rows in set (0.00 sec)
- mysql>
步驟三:將db1庫user3表所有記錄導出, 存到/myload/user.txt文件里。
命令操作如下所示:
- mysql> select * from db1.user3 into outfile "/myload/user.txt" ;
- Query OK, 23 rows affected (0.00 sec)
- mysql> system ls /myload/
- passwd user.txt
- mysql> system wc -l /myload/user.txt
- 23 /myload/user.txt
- mysql>
- mysql> system vim /myload/user.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
- 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 65534 65534 Kernel Overflow User / /sbin/nologin
- dbus x 81 81 System message bus / /sbin/nologin
- systemd-coredump x 999 997 systemd Core Dumper / /sbin/nologin
- systemd-resolve x 193 193 systemd Resolver / /sbin/nologin
- polkitd x 998 995 User for polkitd / /sbin/nologin
- unbound x 997 994 Unbound DNS resolver /etc/unbound /sbin/nologin
- tss x 59 59 Account used for TPM access /dev/null /sbin/nologin
- chrony x 996 993 /var/lib/chrony /sbin/nologin
- sshd x 74 74 Privilege-separated SSH /var/empty/sshd /sbin/nologin
- tcpdump x 72 72 / /sbin/nologin
- mysql x 27 27 MySQL Server /var/lib/mysql /sbin/nologin
4 案例4:表頭基本約束
4.1 問題
- 表頭不允許賦null值練習
- 表頭加默認值練習
- 表頭加唯一索引練習
4.2 方案
約束是一種限制,設置在表頭上,用來控制表頭的賦值,包括以下幾種:
- NOT NULL :非空,用于保證該字段的值不能為空。
- DEFAULT:默認值,用于保證該字段有默認值。
- UNIQUE:唯一索引,用于保證該字段的值具有唯一性,可以為空。
- PRIMARY KEY:主鍵,用于保證該字段的值具有唯一性并且非空。
- FOREIGN KEY:外鍵,用于限制兩個表的關系,用于保證該字段的值必須來自于主表的關聯列的值,在從表添加外鍵約束,用于引用主表中某些的值。
4.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:表頭不允許賦空值練習
- //建表時給表頭設置默認和不允許賦null值????
- mysql> create database if not exists db1;
- Query OK, 1 row affected (0.07 sec)
- //建表
- mysql> create table db1.t31(
- -> name char(10) not null ,
- -> class char(7) default "nsd",
- -> likes set("money","game","film","music") not null default "film,music" );
- Query OK, 0 rows affected (0.43 sec)
- //查看表頭
- mysql> desc db1.t31;
- +-------+------------------------------------+------+-----+------------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+------------------------------------+------+-----+------------+-------+
- | name | char(10) | NO | | NULL | |
- | class | char(7) | YES | | nsd | |
- | likes | set('money','game','film','music') | NO | | film,music | |
- +-------+------------------------------------+------+-----+------------+-------+
- 3 rows in set (0.01 sec)
- //驗證默認值和不允許為null
- mysql> insert into db1.t31 values (null, null , null);
- ERROR 1048 (23000): Column 'name' cannot be null //表頭name賦null值 報錯
- //表頭likes賦null值 報錯
- mysql> insert into db1.t31 values ("bob", null , null);
- ERROR 1048 (23000): Column 'likes' cannot be null
- //符合約束不報錯
- mysql> insert into db1.t31 values ("bob",null,"money,game,film");
- Query OK, 1 row affected (0.06 sec)
- //不賦值的表頭使用默認值賦值
- mysql> insert into db1.t31(name) values("jim");
- //根據需要自定義表頭的值
- mysql> insert into db1.t31 values ("lucy","nsd2108","game,film");
- //查看表記錄
- mysql> select * from db1.t31;
- +------+---------+-----------------+
- | name | class | likes |
- +------+---------+-----------------+
- | bob | NULL | money,game,film |
- | jim | nsd | film,music |
- | lucy | nsd2108 | game,film |
- +------+---------+-----------------+
- 3 rows in set (0.00 sec)
步驟二:表頭加唯一索引練習
唯一索引 (unique)
約束的方式:表頭值唯一 , 但可以賦null 值
- //建表
- create ???? table db1.t43 (姓名 char(10) , 護照 char(18) unique );
- //查看表頭 唯一索引標志UNI
- mysql> desc db1.t32 ;
- +--------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------+----------+------+-----+---------+-------+
- | 姓名 | char(10) | YES | | NULL | |
- | 護照 | char(18) | YES | UNI | NULL | |
- +--------+----------+------+-----+---------+-------+
- 2 rows in set (0.00 sec)
- //賦null值 可以
- mysql> insert into db1.t32 values("bob",null);
- Query OK, 1 row affected (0.07 sec)
- //表頭值重復不可以
- mysql> insert into db1.t32 values("tom","666888");
- Query OK, 1 row affected (0.08 sec)
- mysql> insert into db1.t32 values("jim","666888");
- ERROR 1062 (23000): Duplicate entry '666888' for key 't32.護照'
- //不重復 可以
- mysql> insert into db1.t32 values("jim","766888");
- Query OK, 1 row affected (0.05 sec)
- //查看表記錄
- mysql> select * from DB1.t43;
- +------+--------+
- | 姓名 | 護照 |
- +------+--------+
- | bob | NULL |
- | tom | 666888 |
- | jim | 766888 |
- +------+--------+
- 3 rows in set (0.00 sec)