mysql数据库基本操作练习
一、MySQL基本管理
1.使用mysql命令連接數據庫。
2.練習查看/刪除/創建庫的相關操作。
3.練習查看/刪除/創建表的相關操作。
實驗步驟:
1.使用mysql命令連接數據庫
連接MySQL服務器時,最基本的用法是通過 -u 選項指定用戶名、-p指定密碼。密碼可以寫在命令行(如果不寫,則出現交互,要求用戶輸入),當然基于安全考慮一般不推薦這么做:
? ??[root@dbsvr1 ~]# mysql -uroot -p1234567 ? ? ? ? //可以緊挨著選項,不要空格
? ? Warning: Using a password on the command line interface can be insecure.
? ? Welcome to the MySQL monitor. Commands end with ; or \g.
? ? Your MySQL connection id is 5
? ? Server version: 5.6.15 MySQL Community Server (GPL)
? ? Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
? ? Oracle is a registered trademark of Oracle Corporation and/or its
? ? affiliates. Other names may be trademarks of their respective
? ? owners.
? ? Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
? ??mysql> exit ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //退出已登錄的mysql> 環境
? ? Bye
建議使用 mysql -uroot -p ?回車在交互操作中輸入密碼,安全性比較高。
默認情況下,msyql命令會連接本機的MySQL服務。但在需要的時候,可以通過 -h 選項指定遠程主機;如果端口不是3306,還可以通過大寫的 -P 選項指定:
? ??[root@dbsvr1 ~]# mysql -u root -p -h 127.0.0.1 -P 3306 ? ?//登錄本地數據庫,-u是定用戶,-p交互輸入密碼,-h主機 ?-P指定端口
? ? Enter password:
? ? Welcome to the MySQL monitor. Commands end with ; or \g.
? ? Your MySQL connection id is 6
? ? Server version: 5.6.15 MySQL Community Server (GPL)
? ? Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
? ? Oracle is a registered trademark of Oracle Corporation and/or its
? ? affiliates. Other names may be trademarks of their respective
? ? owners.
? ? Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
? ? mysql> exit ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //退出已登錄的mysql> 環境
? ? Bye
若要遠程連接其他主機的MySQL服務,有一個前提條件——對方已經添加了此用戶從此客戶機訪問的數據庫授權。
2.練習查看/刪除/創建庫的相關操作
以root用戶登入“mysql> ”環境后,可以執行各種MySQL指令、SQL指令。基本的用法事項如下:
? ??操作指令不區分大小寫(庫名/表名、密碼、變量值等除外)。
? ? 每條SQL指令以 ; 結束或分隔。
? ? 不支持 Tab 鍵自動補齊。
? ? \c 可廢棄當前編寫錯的操作指令。
1)查看現有的庫
? ??mysql> SHOW DATABASES; ? ? ? ? ? ? ?//查看現有的庫,命令可小寫, ?注意命令結尾加“;”
? ? +--------------------+
? ? | Database |
? ? +--------------------+
? ??| information_schema | ? ? ? ? ? ? ? ? //信息概要庫
? ? | mysql | ? ? ? ? ? ? ? ? ? ? ? ? ? ? //授權庫
? ? | performance_schema | ? ? ? ? ? ? ? ?//性能結構庫
? ? | test | ? ? ? ? ? ? ? ? ? ? ? ? ? ? //測試庫(空庫)
? ? +--------------------+
? ? 4 rows in set (0.15 sec)
2)切換/使用指定的庫
切換到test庫:
? ??mysql> USE test; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //切換到數據庫test
? ? Database changed
? ??mysql> SELECT DATABASE(); ? ? ? ? ? ? ? ? ? ? ? ? //確認當前所在的庫
? ? +------------+
? ? | DATABASE() |
? ? +------------+
? ? | test |
? ? +------------+
? ? 1 row in set (0.00 sec)
切換到mysql庫:
? ??mysql> USE mysql; ? ? ? //切換到數據庫mysql
? ? 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> SELECT DATABASE(); ? ? ? ? ? ? ? ? ? ? ? ? //確認當前所在的庫
? ? +------------+
? ? | DATABASE() |
? ? +------------+
? ? | mysql | //mysql
? ? +------------+
? ? 1 row in set (0.00 sec)
3)創建新的庫
新建名為mydb的庫,確認結果:
? ??mysql> CREATE DATABASE mydb; ? ? ? //創建數據庫mydb,命令可小寫
? ? Query OK, 1 row affected (0.03 sec)
? ??mysql> SHOW DATABASES; ? ? ? ? ? ?//查看現有數據庫,確認是否新建成功
? ? +--------------------+
? ? | Database |
? ? +--------------------+
? ? | information_schema |
? ??| mydb | ? ? ? ? ? ? ? ? ? ? ? ? //新建的mydb庫
? ? | mysql |
? ? | performance_schema |
? ? | test |
? ? +--------------------+
? ? 5 rows in set (0.00 sec)
新建名為newdb的庫,確認結果:
? ??mysql> CREATE DATABASE newdb; ? ? ? //新建數據庫newdb
? ? Query OK, 1 row affected (0.00 sec)
? ? mysql> SHOW DATABASES;
? ? +--------------------+
? ? | Database |
? ? +--------------------+
? ? | information_schema |
? ??| mydb | ? ? ? ? ? ? ? ? ? ? ? ? //新建的mydb庫
? ? | mysql |
? ??| newdb | ? ? ? ? ? ? ? ? ? ? ? ? //新建的newdb庫
? ? | performance_schema |
? ? | test |
? ? +--------------------+
? ? 6 rows in set (0.00 sec)
新建數據庫以后,會未每個數據庫建立同名文件夾,可從命令行確認:
? ??[root@dbsvr1 ~]# ls -l /var/lib/mysql/{my,new}db/ ? ?//查看數據庫文件
? ? /var/lib/mysql/mydb/:
? ? 總用量 4
? ? -rw-rw----. 1 mysql mysql 65 1月 7 17:00 db.opt
? ? /var/lib/mysql/newdb/:
? ? 總用量 4
? ? -rw-rw----. 1 mysql mysql 65 1月 7 17:00 db.opt
4)刪除指定的庫
刪除名為newdb的庫:
? ??mysql> DROP DATABASE newdb; ? ? ? ? ? ? ? ?//刪除數據庫newdb
? ? Query OK, 0 rows affected (0.04 sec)
? ??mysql> SHOW DATABASES; ? ? ? ? ? ? ? ? ? ? ? ? //確認刪除結果,已無newdb表
? ? +--------------------+
? ? | Database |
? ? +--------------------+
? ? | information_schema |
? ? | mydb |
? ? | mysql |
? ? | performance_schema |
? ? | test |
? ? +--------------------+
? ? 5 rows in set (0.00 sec)
3.練習查看/刪除/創建表的相關操作
1)查看指定的庫里有哪些表
查看test庫里有哪些表:
? ??mysql> USE test; ? ? //切換到數據庫test
? ? Database changed
? ? mysql> SHOW TABLES; ? ? ? //查看當前數據庫中的表信息
? ? Empty set (0.00 sec) //查詢結果為空
查看mysql庫里有哪些表:
? ??mysql> USE mysql; ? ? ?//切換到數據庫mysql
? ? 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_mysql |
? ? +---------------------------+
? ? | columns_priv |
? ? | db |
? ? | event |
? ? | func |
? ? | general_log |
? ? | help_category |
? ? | help_keyword |
? ? | help_relation |
? ? | help_topic |
? ? | innodb_index_stats |
? ? | innodb_table_stats |
? ? | ndb_binlog_index |
? ? | plugin |
? ? | proc |
? ? | procs_priv |
? ? | proxies_priv |
? ? | servers |
? ? | slave_master_info |
? ? | slave_relay_log_info |
? ? | slave_worker_info |
? ? | slow_log |
? ? | tables_priv |
? ? | time_zone |
? ? | time_zone_leap_second |
? ? | time_zone_name |
? ? | time_zone_transition |
? ? | time_zone_transition_type |
? ??| user | ? ? ? ? ? ? ? ? ? ? //存放數據庫用戶的表
? ? +---------------------------+
? ? 28 rows in set (0.00 sec)
2)查看指定表的字段結構
當前庫為mysql,查看columns_priv表的結構,以列表形式展現:
? ??mysql> DESCRIBE columns_priv\G ? ? ? ? ? ? //查詢表結構,末尾不用分號
? ? *************************** 1. row ***************************
??? Field: Host????????????//字段名
? ? Type: char(60)?????????//字符類型和長度
? ? Null: NO????????????? ?//不能為空
? ? Key: PRI????????????? ?//主鍵
? ? Default:
? ? Extra:
? ? *************************** 2. row ***************************
? ? Field: Db
? ? Type: char(64)
? ? Null: NO
? ? Key: PRI
? ? Default:
? ? Extra:
? ? *************************** 3. row ***************************
? ? Field: User
? ? Type: char(16)
? ? Null: NO
? ? Key: PRI
? ? Default:
? ? Extra:
? ? *************************** 4. row ***************************
? ? Field: Table_name
? ? Type: char(64)
? ? Null: NO
? ? Key: PRI
? ? Default:
? ? Extra:
? ? *************************** 5. row ***************************
? ? Field: Column_name
? ? Type: char(64)
? ? Null: NO
? ? Key: PRI
? ? Default:
? ? Extra:
? ? *************************** 6. row ***************************
? ? Field: Timestamp
? ? Type: timestamp
? ? Null: NO
? ? Key:
? ? Default: CURRENT_TIMESTAMP
? ? Extra: on update CURRENT_TIMESTAMP
? ? *************************** 7. row ***************************
? ? Field: Column_priv
? ? Type: set('Select','Insert','Update','References')
? ? Null: NO
? ? Key:
? ? Default:
? ? Extra:
? ? 7 rows in set (0.00 sec)
查看columns_priv表的結構,以表格形式展現:
? ??mysql> DESCRIBE columns_priv; ? ? ? ? ? ? ? ? //末尾需要有分號
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? | Field | Type | Null | Key | Default | Extra |
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? | Host | char(60) | NO | PRI | | |
? ? | Db | char(64) | NO | PRI | | |
? ? | User | char(16) | NO | PRI | | |
? ? | Table_name | char(64) | NO | PRI | | |
? ? | Column_name | char(64) | NO | PRI | | |
? ? | Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
? ? | Column_priv | set('Select','Insert','Update','References') | NO | | | |
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? 7 rows in set (0.00 sec)
上述操作中,DESCRIBE可縮寫為DESC;另外,當引用非當前庫中的表時,可以用“庫名.表名”的形式。比如,切換為mysql庫再執行“DESCRIBE columns_priv;”,與以下操作的效果是相同的:
? ??mysql> DESC mysql.columns_priv;
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? | Field | Type | Null | Key | Default | Extra |
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? | Host | char(60) | NO | PRI | | |
? ? | Db | char(64) | NO | PRI | | |
? ? | User | char(16) | NO | PRI | | |
? ? | Table_name | char(64) | NO | PRI | | |
? ? | Column_name | char(64) | NO | PRI | | |
? ? | Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
? ? | Column_priv | set('Select','Insert','Update','References') | NO | | | |
? ? +-------------+----------------------------------------------+------+-----+-------------------+-----------------------------+
? ? 7 rows in set (0.00 sec)
3)在test庫中創建一個名為pwlist的表
包括name、password兩列,其中name列作為主鍵。兩個字段值均不允許為空,其中密碼列賦予默認空值,相關操作如下所述。
切換到test庫:
? ? mysql> USE test; ?
? ? Database changed
新建pwlist表:
? ? mysql> CREATE TABLE pwlist( ? ? //新建表pwlist
? ? -> name CHAR(16) NOT NULL, ? ? ?//設置name字段屬性,字符型,長度16,內容不能為空
? ? -> password CHAR(48) DEFAULT '', ?//設置密碼字段屬性,字符行,長度48,默認為空
? ? -> PRIMARY KEY(name) ? ? ? ? ? ?//設置主鍵為name
? ? -> ); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//加;表示結束,執行命令
? ? Query OK, 0 rows affected (0.26 sec)
確認新創建的表:
? ??mysql> SHOW TABLES; ? ? //查看表信息
? ? +----------------+
? ? | Tables_in_test |
? ? +----------------+
? ??| pwlist | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //新建的pwlist表
? ? +----------------+
? ? 1 rows in set (0.01 sec)
查看pwlist表的字段結構:
? ??mysql> DESC pwlist; ? ? ? ?//查詢pwlist表的結構
? ? +----------+----------+------+-----+---------+-------+
? ? | Field | Type | Null | Key | Default | Extra |
? ? +----------+----------+------+-----+---------+-------+
? ? | name | char(16) | NO | PRI | NULL | |
? ? | password | char(48) | YES | | | |
? ? +----------+----------+------+-----+---------+-------+
? ? 2 rows in set (0.01 sec)
4)刪除指定的表
刪除當前庫中的pwlist表:
? ??mysql> DROP TABLE pwlist; ? ? ? ?//刪除表pwlist
? ? Query OK, 0 rows affected (0.01 sec)
確認刪除結果:
? ? mysql> SHOW TABLES;
? ? Empty set (0.00 sec)
5)在test庫中創建一個學員表
在MySQL表內存儲中文數據時,需要更改字符集(默認為latin1不支持中文)。若要修改MySQL服務的默認字符集,可參考本節擴展部分的方法,以使MySQL支持存儲中文數據記錄;或者,也可以在創建庫或表的時候,手動添加“DEFAULT CHARSET=utf8”來更改。
根據上述表格結構,創建支持中文的student表:
? ??mysql> CREATE TABLE test.student( ? ? //在數據庫test中創建表student
? ? -> 學號 char(9) NOT NULL, ? ? ? ? ? ? ? ? ?//學號字段為字符型,長度為9,內容不能空
? ? -> 姓名 varchar(4) NOT NULL, ? ? ? ? ? ? ? //姓名字段為不定長字符型,長度4,不能為空
? ? -> 性別 enum('男','女') NOT NULL,?
? ? -> 手機號 char(11) DEFAULT '',
? ? -> 通信地址 varchar(64),
? ? -> PRIMARY KEY(學號)
? ? -> ) DEFAULT CHARSET=utf8; ? ? ? ? ? ? ? ? //手工指定字符集,采用utf8
? ? Query OK, 0 rows affected (0.07 sec)
查看student表的字段結構:
? ? mysql> DESC test.student; ? ? ? //查看student表的結構
? ? +--------------+-------------------+------+-----+---------+-------+
? ? | Field | Type | Null | Key | Default | Extra |
? ? +--------------+-------------------+------+-----+---------+-------+
? ? | 學號 | char(9) | NO | PRI | NULL | |
? ? | 姓名 | varchar(4) | NO | | NULL | |
? ? | 性別 | enum('男','女') | NO | | NULL | |
? ? | 手機號 | char(11) | YES | | | |
? ? | 通信地址 | varchar(64) | YES | | NULL | |
? ? +--------------+-------------------+------+-----+---------+-------+
? ? 5 rows in set (0.04 sec)
查看student表的實際創建指令:
? ? mysql> SHOW CREATE TABLE test.student;
? ? +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
? ? | Table | Create Table |
? ? +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
? ? | student | CREATE TABLE `student` (
? ? `學號` char(9) NOT NULL,
? ? `姓名` varchar(4) NOT NULL,
? ? `性別` enum('男','女') NOT NULL,
? ? `手機號` char(11) DEFAULT '',
? ? `通信地址` varchar(64) DEFAULT NULL,
? ? PRIMARY KEY (`學號`)
? ? ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
? ? +---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
? ? 1 row in set (0.00 sec)
**** 擴展實驗****
1.修改MySQL服務器使用的默認字符集
1)調整字符集設置:
? ??[root@dbsvr1 ~]# vim /etc/my.cnf ? ? //編輯數據庫住配置文件
? ? [mysqld]
? ? .. ..
? ??character_set_server=utf8 ? ? ? ? ?//設置默認字符集為utf8
2)重啟服務程序:
? ??[root@dbsvr1 ~]# service mysql restart ? ? ?//重啟mysql服務
? ? Shutting down MySQL.. [確定]
? ? Starting MySQL. [確定]
3)確認設置結果:
??? mysql> SHOW VARIABLES LIKE 'character%'; ? ? ? ? //查看默認字符集
? ? +--------------------------+----------------------------+
? ? | Variable_name | Value |
? ? +--------------------------+----------------------------+
? ? | character_set_client | utf8 |
? ? | character_set_connection | utf8 |
? ? | character_set_database | utf8 |
? ? | character_set_filesystem | binary |
? ? | character_set_results | utf8 |
? ? | character_set_server | utf8 |
? ? | character_set_system | utf8 |
? ? | character_sets_dir | /usr/share/mysql/charsets/ |
? ? +--------------------------+----------------------------+
? ? 8 rows in set (0.03 sec)
2.MySQL數據類型
1.在home庫里創建famliy表,表結構自定義。
2.定義表時的字段約束、默認值、主鍵設置。
3.練習各種時間函數的使用。
實驗步驟:
1.創建home庫、family表
1)新建home庫,并切換到home庫
? ??mysql> CREATE DATABASE home; ? ? /新建home庫
? ? Query OK, 1 row affected (0.00 sec)
? ??mysql> USE home; ? //切換到home庫
? ? Database changed
2)新建family表
假定family表用來記錄每個家庭成員的姓名(name)、性別(gender)、出生日期(birth)、職業(job)、與戶主關系(relation)。
? ??mysql> CREATE TABLE family( ? ? ? //新建home表
? ? -> name varchar(16) NOT NULL,
? ? -> gender enum('male','femal') DEFAULT 'male',
? ? -> birth date NOT NULL,
? ? -> job varchar(16) DEFAULT '',
? ? -> relation varchar(24) NOT NULL,
? ? -> PRIMARY KEY(name)
? ? -> );
? ? Query OK, 0 rows affected (0.06 sec)
查看family表的字段結構:
? ??mysql> DESC family; ? ? ?//查看family表的結構
? ? +----------+----------------------+------+-----+---------+-------+
? ? | Field | Type | Null | Key | Default | Extra |
? ? +----------+----------------------+------+-----+---------+-------+
? ? | name | varchar(16) | NO | PRI | NULL | |
? ? | gender | enum('male','femal') | YES | | male | |
? ? | birth | date | NO | | NULL | |
? ? | job | varchar(16) | YES | | | |
? ? | relation | varchar(24) | NO | | NULL | |
? ? +----------+----------------------+------+-----+---------+-------+
? ? 5 rows in set (0.00 sec)
2.練習各種時間函數的使用
1)使用now()查看當前的日期和時間
? ??mysql> SELECT now(); ? ? //查看當前時間和日期
? ? +---------------------+
? ? | now() |
? ? +---------------------+
? ? | 2014-01-07 18:33:31 |
? ? +---------------------+
? ? 1 row in set (0.05 sec)
2)使用sysdate()查看系統日期和時間
? ??mysql> SELECT sysdate(); ? ? //查看當前系統日期和時間
? ? +---------------------+
? ? | sysdate() |
? ? +---------------------+
? ? | 2014-01-07 18:34:12 |
? ? +---------------------+
? ? 1 row in set (0.00 sec)
3)使用curdate()獲得當前的日期,不含時間
? ??mysql> SELECT curdate(); //查看當前日期
? ? +------------+
? ? | curdate() |
? ? +------------+
? ? | 2014-01-07 |
? ? +------------+
? ? 1 row in set (0.00 sec)
4)使用curtime()獲得當前的時間,不含日期
? ??mysql> SELECT curtime(); ? ?//查看當前時間
? ? +-----------+
? ? | curtime() |
? ? +-----------+
? ? | 18:35:26 |
? ? +-----------+
? ? 1 row in set (0.00 sec)
5)分別獲取當前日期時間中的年份、月份、日
? ??mysql> SELECT year(now()),month(now()),day(now()); ? ? //查看當前時間:年-月-日
? ? +-------------+--------------+------------+
? ? | year(now()) | month(now()) | day(now()) |
? ? +-------------+--------------+------------+
? ? | 2014 | 1 | 7 |
? ? +-------------+--------------+------------+
? ? 1 row in set (0.00 sec)
6)獲取系統日期時間中的月份、日 ? ? ? ? ? ? ?
? ??mysql> SELECT month(sysdate()),day(sysdate()); //查看系統時間中的月-日信息
? ? +------------------+----------------+
? ? | month(sysdate()) | day(sysdate()) |
? ? +------------------+----------------+
? ? | 1 | 7 |
? ? +------------------+----------------+
? ? 1 row in set (0.00 sec)
7)獲取系統日期時間中的時刻
? ??mysql> SELECT time(sysdate()); ? ? ? //獲取當前系統時間
? ? +-----------------+
? ? | time(sysdate()) |
? ? +-----------------+
? ? | 18:44:01 |
? ? +-----------------+
? ? 1 row in set (0.00 sec)
注:在mysql語句中 ?關鍵字和命令字可以不區分大小寫,但是數據庫名和表名區分大小寫,各字段之間需用“逗號”分隔,以“分號”結尾。;分割sql語句??? \c終止sql語句?? \G換行
轉載于:https://blog.51cto.com/ironfighter/1876187
總結
以上是生活随笔為你收集整理的mysql数据库基本操作练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue的极简模式
- 下一篇: 笑傲江湖,独孤求败-NetScaler