# 連接mysql mysql -h主機地址 -P端口 -u用戶名 -p
# 顯示數據庫
show databases;
# 使用某個數據庫
use xxx;
# 查看該數據庫中的表
show tables;
# 顯示數據表的結構
describe 表名;
desc 表名;
# 顯示表中的記錄(注意表名大小寫)
select * from 表名;
# 創建數據庫
create database 數據庫名;
# 建表
use 庫名
create table 表名 (字段列表);
# 示例
use blog;
create table user (id int(3) AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(8),
gender CHAR(2) DEFAULT '未知',
birthday DATE
);
describe name;
# 增加一個字段
ALTER TABLE 表名 ADD COLUMN 新字段名 數據類型 [約束條件]; # 在末尾
# 示例
ALTER TABLE `user` ADD COLUMN `province` varchar(25) NOT NULL DEFAULT '上海' COMMENT '省份';
ALTER TABLE 表名 ADD COLUMN 新字段名 數據類型 [約束條件] FIRST; # 在開頭添加字段
# 示例
ALTER TABLE `user` ADD COLUMN `city` varchar(25) NULL COMMENT '城市' FIRST;
ALTER TABLE 表名 ADD COLUMN 新字段名 數據類型 [約束條件] AFTER 已經存在的字段名;# 在中間位置添加字段
# 示例
ALTER TABLE `user` ADD COLUMN `area` varchar(25) NULL COMMENT '區域' AFTER city;# 增加在 city 字段后
ps
ADD COLUMN 添加字段
DEFAULT 默認值
COMMENT 注釋、注解、備注
FIRST 關鍵字使字段放在首位
AFTER 關鍵字使字段放在已有字段后
DEFAULT 默認值
DEFAULT NULL 默認為空
# 修改字段數據類型及默認值空/非空
ALTER TABLE 數據表名 MODIFY 字段名 數據類型 DEFAULT 默認值;# 修改數據類型及默認值
# 示例
ALTER TABLE user MODIFY province varchar(250) DEFAULT '北京';
ALTER TABLE user MODIFY province varchar(250) DEFAULT NULL;
ALTER TABLE 表名 ALERT COLUMN 字段名 SET DEFULT 默認值;# 修改默認值
# 示例
ALTER TABLE user ALTER COLUMN province SET DEFULT 'beijing';
ps:由於不同類型的數據的存儲方式及長度不相同,修改數據類型可能會影響數據表中已有的數據記錄,數據表中已經有數據時,謹慎修改
# 刪除字段默認值
ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT;
# 示例
ALTER TABLE user ALTER COLUMN province DROP DEFAULT;
# 修改字段名
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段類型;
# 示例
ALTER TABLE user CHANGE new_province new_province2 VARCHAR(250);
# 增加數據
INSERT INTO user VALUES ('','張三','男','2019-01-01');# 按字段順序依次增加數據
# 示例
INSERT INTO user ('name','gender','birthday') VALUE ('李四','女','2020-06-01');# 可控制增加字段,字段對應數據
INSERT INTO user SET name = '王五',gender = '男',birthday = '2018-05-16';# 前后不需對應,易調
SELECT * FROM name;# 查詢可見三條數據
# 修改數據
UPDATE 表名 SET 字段='',... [WHERE 條件]
# 示例
UPDATE user SET birthday='2019-01-01' WHERE name='張三'; # 將張三的出生年月改為2019-06-01
# 將 B 表的字段值賦值給 A 表中的字段
UPDATE tableA a,tableB b SET a.column=b.column [WHERE 條件];
UPDATE tableA a LEFT JOIN tableB b ON a.id=b.cs_id SET b.column=a.column [WHERE 條件];
UPDATE tableA a SET a.column1 = (SELECT b.column1 FROM tableB b WHERE a.id = b.aid)[WHERE 條件]
# 示例
UPDATE test a,test2 b SET a.info=b.cs_id WHERE a.id = 49536;
UPDATE test a LEFT JOIN test2 b ON a.id = b.cs_id SET a.info=b.id WHERE a.id = 24;
UPDATE test a SET a.info = (SELECT b.id FROM test2 b WHERE a.id = b.cs_id),
WHERE EXISTS (SELECT c_id FROM test3 c WHERE a.id = c.aid);
# 刪除字段
ALTER TABLE 表名 DROP column 列名;
# 刪除數據
DELETE FROM 表名 [WHERE 條件]
# 示例
DELETE FROM user WHERE name='張三'; # 刪除名字是張三的數據
# 刪除關聯表數據
# 刪除 test_new 表數據,條件是 a 表info字段值為 2022
DELETE a FROM test_new a, test b WHERE a.id=b.id and a.info = 2022;
# 刪表
DROP TABLE 表名;# 直接刪除表信息,速度最快,無法找回數據
TRUNCATE TABLE 表名;# 刪除表數據,不刪除表的結構,速度排第二,不能與 where 一起使用
DELETE FROM 表名 (WHERE 條件);# 刪除表中的數據,不刪除表結構,速度最慢,可以與 where 連用,可以刪除指定的行
# 語句類型:delete 語句是數據庫操作語言(DML),truncate,drop是數據庫定義語言(DDL);
# 效率:一般來說 drop > truncate> delete;
# 增加索引
A、ALTER TABLE 表名 ADD 索引 索引名(字段名)
B、CREATE 索引 索引名 ON 表名 (字段名)
C、ALTER TABLE 表名 ADD 索引 索引名 (字段名,字段名,...)# 添加多列索引
# 示例
ALTER TABLE `user` ADD INDEX province(province) # 添加普通索引
ps
UNIQU 唯一索引,不可以出現相同的值,可以有 NULL 值
INDEX 普通索引,允許出現相同的索引內容
PROMARY KEY 主鍵索引,不允許出現相同的值
FULLTEXT 全文索引,可以針對值中的某個單詞,但效率確實不敢恭維
組合索引: 實質上是將多個字段建到一個索引里,列值的組合必須唯一
# 修改索引
ps:MySQL 中沒有真正意義上的修改索引
只有先刪除之后在創建新的索引才可以達到修改的目的
原因是mysql在創建索引時會對字段建立關系長度等
只有刪除之后創建新的索引才能創建新的關系保證索引的正確性;
# 刪除索引
DROP INDEX 索引名 ON 表名
# 查看索引
SHOW INDEX FROM 表名;
# 刪庫
DROP DATEBASE庫名;
# 重命名表
ALTER TABLE 表原名 rename 新表名;
# 數據庫某表的備份
mysqldump -u root -p 數據庫名 表名 > 備份文件名
# 數據庫備份
mysqldump -u root -p mysql > /home/mysql.sql# 把數據庫 mysql 備份到home目錄下,命名為 mysql.sql
mysqldump -u賬號 -p密碼 數據庫 | gzip > 腳本路徑
# 示例
#!/bin/bash
mysqldump -uroot -proot test > /home/backup/test_$(date +%Y%m%d_%H%M%S).sql
# 備份進行壓縮
#!/bin/bash
mysqldump -uroot -proot test | gzip > /home/backup/test_$(date +%Y%m%d_%H%M%S).sql.gz
# 備份MySQL數據庫為帶刪除表的格式,能夠讓該備份覆蓋已有數據庫而不需要手動刪除原有數據庫
mysqldump -–add-drop-table -u賬號 -p密碼 數據庫 > test_$(date +%Y%m%d_%H%M%S).sql
# 僅備份數據庫結構
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
# 同時備份多個數據庫
mysqldump -u賬號 -p密碼 –databases databasename1 databasename2 databasename3 > multibackupfile.sql
# 備份服務器上所有數據庫
mysqldump –all-databases > 腳本路徑及名稱(ls:/home/test.sql)
# 數據庫還原
# 還原全部數據庫
source 備份路徑及名稱 # source方法
mysql -u賬號 -p密碼 數據庫名< 腳本路徑及名稱(ls:test.sql)
# 還原壓縮的MySQL數據庫
gunzip < 腳本路徑及名稱(ls:test.sql.gz) | mysql -uusername -ppassword databasename
# 導出數據
# 導出結構不導出數據
mysqldump -u用戶名 -p密碼 -d 數據庫名 > 數據庫名.sql
# 導出數據和表結構
mysqldump -u用戶名 -p密碼 數據庫名 > 數據庫名.sql
# 到處特定表
mysqldump -u用戶名 -p密碼 數據庫名 --table 表名 > 數據庫名.sql
# 導出數據不導出表結構
mysqldump -u用戶名 -p密碼 數據庫名 表名 > filename.sql
# 導入數據
mysql -u賬號 -p密碼 數據庫<sql腳本
# 示例
mysql -uroot -proot test</home/test20211220.sql
# 將數據庫轉移到新服務器
ysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
# 將兩個表的數據拼接后插入到另一個表
mysqldump -u用戶名 -p密碼 數據庫名 表名 --where="篩選條件" > 導出文件路徑
# 示例
mysqldump -uroot -p123456 test user --where=" id=11" > /home/xyx/Temp.sql
# 退出 mysql
exit
A