MySQL基本操作命令和数据表高级操作
數(shù)據(jù)庫之MySQL基本操作命令
- 一、常用的數(shù)據(jù)類型
- 二、查看數(shù)據(jù)庫、表和表結(jié)構(gòu)
- 1、查看數(shù)據(jù)庫
- 2、查看數(shù)據(jù)庫包含的表
- 3、查看表結(jié)構(gòu)
- 三、SQL語句
- 創(chuàng)建新的數(shù)據(jù)庫
- 創(chuàng)建新的表
- 刪除指定數(shù)據(jù)表
- 刪除指定數(shù)據(jù)庫
- 1、管理表中的數(shù)據(jù)記錄
- 向數(shù)據(jù)表中插入新的數(shù)據(jù)記錄
- 查詢數(shù)據(jù)記錄
- 修改、更新數(shù)據(jù)表中的數(shù)據(jù)記錄
- 在數(shù)據(jù)表中刪除指定的數(shù)據(jù)記錄
- 2、修改表名和表結(jié)構(gòu)
- 修改表名
- 擴(kuò)展表結(jié)構(gòu)(增加字段)
- 修改字段(列)名,添加唯一鍵
- 刪除字段
- 3、擴(kuò)展
- 四、數(shù)據(jù)表高級操作
- 1、克隆表
- 方法一
- 方法二
- 2、清空表,刪除表內(nèi)的所有數(shù)據(jù)
- 方法一
- 方法二
- 3、創(chuàng)建臨時表
- 4、Mysql中6種常見的約束
- 5、創(chuàng)建外鍵約束作用(誤刪,修改),保證數(shù)據(jù)的完整性和一致性
- 五、數(shù)據(jù)庫用戶管理
- 1、新建用戶
- 2、查看用戶信息
- 3、重命名用戶
- 4、刪除用戶
- 5、修改當(dāng)前登錄用戶密碼
- 6、修改其他用戶密碼
- 7、忘記 root 密碼的解決辦法
- 修改 /etc/my.cnf 配置文件,不使用密碼直接登錄到 mysql
- 使用 update 修改 root 密碼,刷新數(shù)據(jù)庫
- 六、數(shù)據(jù)庫用戶授權(quán)
- 1、授予權(quán)限
- 2、查看權(quán)限
- 3、撤銷權(quán)限
- 總結(jié)
一、常用的數(shù)據(jù)類型
| int | 整型 |
| float | 單精度浮點(diǎn)-------4字節(jié)32位 |
| double | 雙精度浮點(diǎn)-------8字節(jié)64位 |
| char | 固定長度的字符類型 |
| varchar | 可變長度的字符類型 |
| text | 文本 |
| image | 圖片 |
| decimal (5,2) | 5個有效長度數(shù)字,小數(shù)點(diǎn)后面有2位 |
二、查看數(shù)據(jù)庫、表和表結(jié)構(gòu)
1、查看數(shù)據(jù)庫
SHOW DATABASES;2、查看數(shù)據(jù)庫包含的表
USE 數(shù)據(jù)庫名; SHOW TABLES;3、查看表結(jié)構(gòu)
USE 數(shù)據(jù)庫名; DESCRIBE [數(shù)據(jù)庫名.]表名; 可縮寫成:DESC 表名;三、SQL語句
| DDL | 數(shù)據(jù)定義語言,用于創(chuàng)建數(shù)據(jù)庫對象,如庫、表、索引等 |
| DML | 數(shù)據(jù)操縱語言,用于對表中的數(shù)據(jù)進(jìn)行管理 |
| DQL | 數(shù)據(jù)查詢語言,用于從數(shù)據(jù)表中查找符合條件的數(shù)據(jù)記錄 |
| DCL | 數(shù)據(jù)控制語言,用于設(shè)置或者更改數(shù)據(jù)庫用戶或角色權(quán)限 |
創(chuàng)建新的數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名;例如:create database CLASS;創(chuàng)建新的表
CREATE TABLE 表名 (字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[,...][,PRIMARY KEY (主鍵名)]);#主鍵一般選擇能代表唯一性的字段不允許取空值(NULL),一個表只能有一個主鍵。 例:use CLASS; create table people (id int(5) not null,name char(20) not null,age char(5),primary key (id));刪除指定數(shù)據(jù)表
DROP TABLE [數(shù)據(jù)庫名.]表名; #如不用USE進(jìn)入庫中,則需加上數(shù)據(jù)庫名
刪除指定數(shù)據(jù)庫
DROP DATABASE 數(shù)據(jù)庫名;1、管理表中的數(shù)據(jù)記錄
向數(shù)據(jù)表中插入新的數(shù)據(jù)記錄
INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);例:create database CLASS;use people;create table people (id int(5) not null,name char(20) not null,age char(5) not null,primary key (id));insert into people (id,name,age) values(1,'zhangsan','18');查詢數(shù)據(jù)記錄
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 條件表達(dá)式];例:select * from people; select name from people where id=1; select name from people\G #以列表方式豎向顯示 select * from people limit 2; #只顯示頭兩行 select * from people limit 2,3; #顯示第二行后的前三行
修改、更新數(shù)據(jù)表中的數(shù)據(jù)記錄
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 條件表達(dá)式];例:insert into people (id,name,age) values(2,'lisi','22'); insert into people (id,name,age) values(3,'wangwu','25'); select * from people;update people set id=4 where name='zhangsan'; select * from people;update people set name='aabbcc',age=50 where id=2; select * from people;
在數(shù)據(jù)表中刪除指定的數(shù)據(jù)記錄
DELETE FROM 表名 [WHERE 條件表達(dá)式];例:delete from people where id=2; select * from people;2、修改表名和表結(jié)構(gòu)
修改表名
ALTER TABLE 舊表名 RENAME 新表名;例:alter table people rename people_123; show tables; select * from people_123;擴(kuò)展表結(jié)構(gòu)(增加字段)
ALTER TABLE 表名 ADD address varchar(50) default '地址不詳'; #default ‘地址不詳’:表示此字段設(shè)置默認(rèn)值 地址不詳;可與 NOT NULL 配合使用例: alter table people_123 add address varchar(50) default '地址不詳';
修改字段(列)名,添加唯一鍵
ALTER TABLE 表名 CHANGE 舊列名 新列名 數(shù)據(jù)類型 [unique key];例: alter table people_123 change name new_name varchar(20) unique key; desc people_123; mysql 有主鍵、唯一鍵 主鍵:唯一且非空 唯一鍵:唯一,但可以為空(空值只能出現(xiàn)一次) 主鍵包含唯一鍵的部分屬性 而唯一鍵不能完全作為主鍵刪除字段
ALTER TABLE 表名 DROP 字段名;例:alter table people_123 drop address;3、擴(kuò)展
use school; create table if not exists info ( id int(4) zerofill primary key auto_increment, #指定主鍵的第二種方式 name varchar(10) not null, cardid int(18) not null unique key, hobby varchar(50));#---------------命令解釋-------------------------------- #if not exists:表示檢測要創(chuàng)建的表是否已存在,如果不存在就繼續(xù)創(chuàng)建 #int(4) zerofill:表示若數(shù)值不滿4位數(shù),則前面用“0”填充,例0001 #auto_increment:表示此字段為自增長字段,即每條記錄自動遞增1,默認(rèn)從1開始遞增;自增長字段數(shù)據(jù)不可以重復(fù);自增長字段必須是主鍵;如添加的記錄數(shù)據(jù)沒有指定此字段的值且添加失敗也會自動遞增一次 #unique key:表示此字段唯一鍵約束,此字段數(shù)據(jù)不可以重復(fù);一張表中只能有一個主鍵, 但是一張表中可以有多個唯一鍵 #not null:表示此字段不允許為NULL
四、數(shù)據(jù)表高級操作
1、克隆表
方法一
create table info1 like info;; #通過 LIKE 方法,復(fù)制 info表結(jié)構(gòu)生成 info1 表 insert into info1 select * from info; #備份內(nèi)容
方法二
CREATE TABLE info2 (SELECT * from info);show create table info2\G; #獲取數(shù)據(jù)表的表結(jié)構(gòu)、索引等信息 SELECT * from info2;2、清空表,刪除表內(nèi)的所有數(shù)據(jù)
方法一
delete from info1; #DELETE清空表后,返回的結(jié)果內(nèi)有刪除的記錄條目;DELETE工作時是一行一行的刪除記錄數(shù)據(jù)的;如果表中有自增長字段,使用DELETE FROM 刪除所有記錄后,再次新添加的記錄會從原來最大的記錄 ID 后面繼續(xù)自增寫入記錄。方法二
truncate table info2; #TRUNCATE 清空表后,沒有返回被刪除的條目;TRUNCATE 工作時是將表結(jié)構(gòu)按原樣重新建立,因此在速度上 TRUNCATE 會比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表內(nèi)數(shù)據(jù)后,ID 會從 1 開始重新記錄。- 速度
drop>truncate>delete - 安全性
delete 最安全
3、創(chuàng)建臨時表
- 臨時表創(chuàng)建成功之后,使用SHOW TABLES命令是看不到創(chuàng)建的臨時表的,臨時表會在連接退出后被銷毀。
- 如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用 DROP TABLE 語句手動直接刪除臨時表。
- PS:臨時表無法創(chuàng)建外鍵。
4、Mysql中6種常見的約束
主鍵約束(primary key) 外鍵約束(foreign key) 非空約束(not null) 唯一性約束(unique [key|index]) 默認(rèn)值約束(default) 自增約束(auto_increment)5、創(chuàng)建外鍵約束作用(誤刪,修改),保證數(shù)據(jù)的完整性和一致性
- 主鍵表和外鍵表的理解:
- 以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表)
- 以公共關(guān)鍵字作外鍵的表為外鍵表(從表、外表)
注意:與外鍵關(guān)聯(lián)的子表的字段必須設(shè)置為主鍵。要求主表外鍵字段和子表的字段具備相同的數(shù)據(jù)類型、字符長度和約束。
- 插入新的數(shù)據(jù)記錄時,要先主表再從表
- 刪數(shù)據(jù)記錄時,要先從表再主表,也就是說刪除主鍵表時必須要先刪除其他與之相關(guān)聯(lián)的表
- 查看和刪除外鍵約束
五、數(shù)據(jù)庫用戶管理
1、新建用戶
CREATE USER '用戶名'@'來源地址' [IDENTIFIED BY [PASSWORD] '密碼']; #----------------------解釋部分----------------------------------------- '用戶名':指定將創(chuàng)建的用戶名 '來源地址':指定新創(chuàng)建的用戶可在哪些主機(jī)上登錄,可使用IP地址、網(wǎng)段、主機(jī)名的形式,本地用戶可用localhost,允許任意主機(jī)登錄可用通配符% '密碼':若使用明文密碼,直接輸入'密碼',插入到數(shù)據(jù)庫時由Mysql自動加密;若使用加密密碼,需要先使用SELECT PASSWORD('密碼'); 獲取密文,再在語句中添加 PASSWORD '密文';若省略“IDENTIFIED BY”部分,則用戶的密碼將為空(不建議使用) #---------------------------------------------------------------------- 例如: create user 'user1'@'localhost' IDENTIFIED BY '35123512';select password('35123512'); create user 'user2'@'localhost' IDENTIFIED BY PASSWORD '*686EC9AF708AFAEBB8809F506E9FFC8AE012E893';2、查看用戶信息
#創(chuàng)建后的用戶保存在 mysql 數(shù)據(jù)庫的 user 表里 use mysql; select user,authentication_string,Host from user;3、重命名用戶
rename user 'user1'@'localhost' to 'zhangsan'@'localhost';4、刪除用戶
drop user 'zhangsan'@'localhost';5、修改當(dāng)前登錄用戶密碼
set PASSWORD = PASSWORD('abc123');6、修改其他用戶密碼
set PASSWORD for 'user2'@'localhost' = PASSWORD('abc123');7、忘記 root 密碼的解決辦法
修改 /etc/my.cnf 配置文件,不使用密碼直接登錄到 mysql
vim /etc/my.cnf [mysqld] skip-grant-tables #添加,使登錄mysql不使用授權(quán)表systemctl restart mysqld.servicemysql #直接登錄
使用 update 修改 root 密碼,刷新數(shù)據(jù)庫
update mysql.user set AUTHENTICATION_STRING = PASSWORD('35123512') where user='root';FLUSH PRIVILEGES; quitmysql -u root -p35123512注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 刪除或注釋,并重啟 mysql 服務(wù)。
六、數(shù)據(jù)庫用戶授權(quán)
1、授予權(quán)限
GRANT語句:專門用來設(shè)置數(shù)據(jù)庫用戶的訪問權(quán)限。當(dāng)指定的用戶名不存在時,GRANT語句將會創(chuàng)建新的用戶;當(dāng)指定的用戶名存在時,GRANT 語句用于修改用戶信息。GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'來源地址' [IDENTIFIED BY '密碼'];#權(quán)限列表:用于列出授權(quán)使用的各種數(shù)據(jù)庫操作,以逗號進(jìn)行分隔,如“select,insert,update”。使用“all”表示所有權(quán)限,可授權(quán)執(zhí)行任何操作。#數(shù)據(jù)庫名.表名:用于指定授權(quán)操作的數(shù)據(jù)庫和表的名稱,其中可以使用通配符“*”。*例如,使用“school.*”表示授權(quán)操作的對象為 school數(shù)據(jù)庫中的所有表。#'用戶名@來源地址':用于指定用戶名稱和允許訪問的客戶機(jī)地址,即誰能連接、能從哪里連接。來源地址可以是域名、IP 地址,還可以使用“%”通配符,表示某個區(qū)域或網(wǎng)段內(nèi)的所有地址,如“%.zhangsan.com”、“192.168.172.%”等。#IDENTIFIED BY:用于設(shè)置用戶連接數(shù)據(jù)庫時所使用的密碼字符串。在新建用戶時,若省略“IDENTIFIED BY”部分, 則用戶的密碼將為空。 例如: #允許用戶 zhangsan 在本地查詢 school 數(shù)據(jù)庫中所有表的數(shù)據(jù)記錄,但禁止查詢其他數(shù)據(jù)庫中的表的記錄。 GRANT select ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';flush privileges; quitmysql -u zhangsan -pabc123 use school; show tables; select * from info;其他授權(quán)例子: #允許用戶 zhangsan 在所有終端遠(yuǎn)程連接 mysql ,并擁有所有權(quán)限。 GRANT ALL [PRIVILEGES] ON *.* TO 'zhangsan'@'%' IDENTIFIED BY 'abc123';
2、查看權(quán)限
SHOW GRANTS FOR 用戶名@來源地址;例如: SHOW GRANTS FOR 'zhangsan'@'localhost';3、撤銷權(quán)限
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM 用戶名@來源地址; 例如: REVOKE SELECT ON "school".* FROM 'zhangsan'@'localhost'; SHOW GRANTS FOR 'zhangsan'@'localhost';#USAGE權(quán)限只能用于數(shù)據(jù)庫登陸,不能執(zhí)行任何操作;USAGE權(quán)限不能被回收,即 REVOKE 不能刪除用戶。 flush privileges; REVOKE ALL ON *.* FROM 'zhangsan'@'localhost';總結(jié)
1、常用操作
創(chuàng)建庫和表 create database 數(shù)據(jù)庫名; create table 表名(字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型,....,[primary key(主鍵名)]);刪除庫和表 drop table [數(shù)據(jù)庫名.]表名; drop table 數(shù)據(jù)庫名;修改表名 alter table 舊表名 rename 新表名;擴(kuò)展表結(jié)構(gòu)(增加字段) alter table 表名 add address varchar(50) default '地址不詳';修改字段(列)名,添加唯一鍵 alter table 表名 change 舊列名 新列名 數(shù)據(jù)類型 [unique key];刪除字段、主鍵 alter table 表名 drop 字段名;添加字段 alter table 表名 add 字段名;插入新數(shù)據(jù) insert into 表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);更新數(shù)據(jù) update 表名 set 字段名1=字段值1[,字段名2=字段值2] [where 條件表達(dá)式];刪除數(shù)據(jù) delete from 表名 [where 條件表達(dá)式];查詢數(shù)據(jù)記錄 select 字段名1,字段名2[,...] from 表名 [where 條件表達(dá)式]; limit 的使用方法2、主鍵唯一鍵區(qū)別
mysql 有主鍵、唯一鍵 主鍵:唯一且非空 唯一鍵:唯一,但可以為空(空值只能出現(xiàn)一次) 主鍵包含唯一鍵的部分屬性 而唯一鍵不能完全作為主鍵3、一些參數(shù)的意思
- if not exists:表示檢測要創(chuàng)建的表是否已存在,如果不存在就繼續(xù)創(chuàng)建
- int(4) zerofill:表示若數(shù)值不滿4位數(shù),則前面用“0”填充,例0001
- auto_increment:表示此字段為自增長字段,即每條記錄自動遞增1,默認(rèn)從1開始遞增;自增長字段數(shù)據(jù)不可以重復(fù);自增長字段必須是主鍵;如添加的記錄數(shù)據(jù)沒有指定此字段的值且添加失敗也會自動遞增一次
- unique key:表示此字段唯一鍵約束,此字段數(shù)據(jù)不可以重復(fù);一張表中只能有一個主鍵, 但是一張表中可以有多個唯一鍵
4、克隆表
方法一:create table 新的表名 like 想要復(fù)制的表;
insert into 新的表名 select * from 想要復(fù)制的表;
這個方法先是將表的結(jié)構(gòu)進(jìn)行復(fù)制,之后再復(fù)制內(nèi)容,這種方法復(fù)制的表內(nèi)容完整。
方法二:create table 新的表名 (select * from 想要復(fù)制的表);
這種方法會將oldtable中所有的內(nèi)容都拷貝過來不過這種方法的一個最不好的地方就是新表中沒有了舊表的primary key、Extra(auto_increment)等屬性。
5、清空表
- 速度
drop>truncate>delete - 安全性
delete 最安全
6、創(chuàng)建臨時表
臨時表創(chuàng)建成功之后,使用SHOW TABLES命令是看不到創(chuàng)建的臨時表的,臨時表會在連接退出后被銷毀。 如果在退出連接之前,也可以可執(zhí)行增刪改查等操作,比如使用 DROP TABLE 語句手動直接刪除臨時表。
7、創(chuàng)建外鍵約束
- 主鍵表和外鍵表的理解:
- 以公共關(guān)鍵字作主鍵的表為主鍵表(父表、主表)
- 以公共關(guān)鍵字作外鍵的表為外鍵表(從表、外表)
注意:與外鍵關(guān)聯(lián)的子表的字段必須設(shè)置為主鍵。要求主表外鍵字段和子表的字段具備相同的數(shù)據(jù)類型、字符長度和約束。
- 插入新的數(shù)據(jù)記錄時,要先主表再從表
- 刪數(shù)據(jù)記錄時,要先從表再主表,也就是說刪除主鍵表時必須要先刪除其他與之相關(guān)聯(lián)的表
- 刪除外鍵約束
8、MySQL中6種常見的約束
- 外鍵約束 foreign key
- 非空約束 not null
- 唯一約束 unique [key|index]
- 默認(rèn)值約束 default
- 自增約束 auto_increment
9、數(shù)據(jù)庫用戶管理
增刪改查的命令上面可以看到
當(dāng)忘記用戶密碼時可以 修改 /etc/my.cnf 配置文件,不使用密碼直接登錄到 mysql
使用 update 修改 root 密碼,刷新數(shù)據(jù)庫。
修改完成之后記得需要將/etc/my.cnf添加的項(xiàng)注釋或者刪除
用戶權(quán)限管理上面看操作
總結(jié)
以上是生活随笔為你收集整理的MySQL基本操作命令和数据表高级操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米5x内存卡插入指南,秒变存储大户
- 下一篇: Mysql索引的创建和使用