MySQL數據庫入門
-
-
介紹&安裝
https://blog.csdn.net/weixx3/article/details/80782479 安裝教程
https://www.osyunwei.com/archives/2014.html 修改密碼 會遇到問題因爲mysql版本所以下面的鏈接
https://www.cnblogs.com/wangbaobao/p/7087032.html 修改密碼 修改密碼可能出現密碼策略問題
https://blog.csdn.net/hello_world_qwp/article/details/79551789 修改密碼策略
https://www.cnblogs.com/cpl9412290130/p/9583868.html 解決權限問題
檢查mysql服務狀態:systemctl status mysql.service
我的mysql密碼是root
sudo mysql -u root -p 登錄到mysql
-
DML
select查詢語句,左外鏈接,右外連接;insert 插入語句,;update修改語句,;delete刪除語句,。
-
DDL
create,;drop,;truncate,;rename,;alter,; -
存儲引擎
-
字段類型
權限管理
-
權限管理開場
-
MySQL權限驗證
-
常見場景舉例
-
權限安全
常用系統命令
-
常用系統命令(上)
-
常用系統命令(下)
作業
圖書表
id book_id author_id book_name pages press
獎項表
id book_id author_id cup_type cup_time
作者表
id author_id author_name content
一、設計表,寫出建表語句(我給出的字段內容、名稱僅供參考,各位同學可以按照自己的設計建表)
crete database data0709;
use data0709;
create table d_book(
id int(10) NOT NULL AUTO_INCREMENT COMMENT'id',
book_id varchar(20) NOT NULL COMMENT 'book id',
author_id varchar(20) NOT NULL COMMENT 'author id',
book_name varchar(20) NOT NULL COMMENT 'book name',
book_pages varchar(20) NOT NULL COMMENT 'book page',
book_press varchar(20) NOT NULL COMMENT 'book press',
primary key(id));
create table d_author(
id int(10) NOT NULL AUTO_INCREMENT COMMENT'id',
author_id varchar(20) NOT NULL COMMENT 'author id',
author_name varchar(20) NOT NULL COMMENT 'author name',
content varchar(20) COMMENT 'content',
primary key(id));
create table d_prize(
id int(10) NOT NULL AUTO_INCREMENT COMMENT'id',
book_id varchar(20) NOT NULL COMMENT 'book id',
prize_type varchar(20) NOT NULL COMMENT 'prize type',
prize_time Date NOT NULL COMMENT 'prize time',
author_id varchar(20) NOT NULL COMMENT 'author id',
primary key(id));
二、設計索引,寫出創建索引的語句
首先分析這三個的關係,一個作者可以寫多本書,某作者以某書獲得某個獎,一個人通過一本書可以獲得多個獎項。
ALTER TABLE d_book ADD UNIQUE uk_book_author (author_id,book_id);
ALTER TABLE d_prize ADD UNIQUE uk_book_author_prize (author_id,book_id,prize_type);
三、完成以下SQL
1. 查詢姓王的作者有多少
先插入一些數據哈~insert into d_author(author_id,author_name) values ('2','海波');
插入時候會遇到不能插入中文,解決辦法:alter table d_author change author_name author_name varchar(255) character set utf8;
然後再查找姓王的作=作者有多少:
select count(*) from d_author where author_name like '王%';
2. 查詢頁數最多的前5名作者姓名和書名
select d_book.book_name,d_author.author_name from d_book join d_author on d_book.author_id=d_author.author_id order by book_pages desc limit 5;
3. 查詢獲獎最多的作者姓名,獲獎時間
select d_prize.prize_time,d_author.author_name from d_author join d_prize on d_prize.author_id=d_author.author_id group by d_prize.author_id order by count(author_name) desc limit 1;
4. 查詢獲獎作者總人數
select count(distinct author_id ) from d_prize;
5. 查詢最近獲獎的一本書名和出版社
select d_book.book_press,d_book.book_name from d_book join d_prize on d_prize.book_id=d_book.book_id order by d_prize.prize_time desc limit 1;
6. 查詢同時獲得過金獎、銀獎的作者姓名
SELECT d_author.author_name FROM d_author INNER JOIN d_prize ON d_author.author_id = d_prize.author_id WHERE prize_type = "金獎" OR prize_type = "銀獎" GROUP BY d_prize.author_id HAVING COUNT( * ) = 2;
7. 查詢獲得過金獎的圖書有多少本,銀獎的有多少本
SELECT prize_type, COUNT(prize_type) from d_prize where prize_type='金獎'or prize_type='銀獎' GROUP BY prize_type;
8. 查詢最近一年內獲過獎的作者姓名
select distinct d_author.author_name from d_author join d_prize on d_author.author_id = d_prize.author_id where prize_time>DATE_SUB( CURDATE( ), INTERVAL 1 YEAR );
9. 查詢每位作者各自出版的圖書名
select author_name,group_concat(book_name) from d_author join d_book on d_book.author_id=d_author.author_id group by author_name;
四、
1.如何查看錶的結構信息?
show create table 表名;
2.聯合索引中的字段順序應該如何設計?
通常就按照where條件中字段的順序建立 ,這樣根據最左匹配原則纔可以生效。
https://www.cnblogs.com/goody9807/p/7396195.html
3.int(10)和varchar(10)兩個字段的(10)有什麼區別?
int(10)的10表示顯示的數據的長度,不是存儲數據的大小;chart(10)和varchar(10)的10表示存儲數據的大小,即表示存儲多少個字符。
4.以下查詢如何創建索引能夠實現覆蓋索引優化?
select invalid_time_flag from pushtoken_android_62 where uid = ’AC54E24E-FB73-3981-C4BC-CED8D69407F8’and pid = ‘10010’
select count(*) from pushtoken_android_62 where uid = ’AC54E24E-FB73-3981-C4BC-CED8D69407F8’and pid = ‘10010’
提示:調整索引時請給出依據,要有explain的說明前後對比。
創建表並加數據:
create table ushtoken_android_62(
id int(10) NOT NULL AUTO_INCREMENT COMMENT'id',
uid varchar(20) NOT NULL COMMENT 'uid',
pid varchar(20) NOT NULL COMMENT 'pid',
tokenid varchar(20) NOT NULL COMMENT 'token id',
primary key(id));
insert into ushtoken_android_62 (uid,pid,tokenid) values ('AC54E24E-F8','10010','hikhkjhjh');
證明最左匹配原則的過程:
沒有索引情況:
explain select tokenid from ushtoken_android_62 where uid = 'AC54E24E-F8' ;
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | ushtoken_android_62 | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
添加查詢順序的索引:
ALTER TABLE ushtoken_android_62 ADD UNIQUE uk_uid_pid (uid,pid);
explain select tokenid from ushtoken_android_62 where uid = 'AC54E24E-F8' and pid = '10010';
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
| 1 | SIMPLE | ushtoken_android_62 | NULL | const | uk_uid_pid | uk_uid_pid | 44 | const,const | 1 | 100.00 | NULL |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
刪除索引,換字段順序
ALTER TABLE ushtoken_android_62 drop index uk_uid_pid
ALTER TABLE ushtoken_android_62 ADD UNIQUE uk_pid_uid (pid,uid);
explain select tokenid from ushtoken_android_62 where uid = 'AC54E24E-F8';
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | ushtoken_android_62 | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | Using where |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
explain select tokenid from ushtoken_android_62 where uid = 'AC54E24E-F8' and pid = '10010';
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
| 1 | SIMPLE | ushtoken_android_62 | NULL | const | uk_pid_uid | uk_pid_uid | 44 | const,const | 1 | 100.00 | NULL |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------+
explain select count(*) tokenid from ushtoken_android_62 where uid = 'AC54E24E-F8' and pid = '10010';
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+-------------+
| 1 | SIMPLE | ushtoken_android_62 | NULL | const | uk_pid_uid | uk_pid_uid | 44 | const,const | 1 | 100.00 | Using index |
+----+-------------+---------------------+------------+-------+---------------+------------+---------+-------------+------+----------+------------