Mysql的基本使用(登陸&退出、建立&刪除&選擇資料庫、基本資料型別、建立&刪除表格等)
登入mysql資料庫
mysql -h hostname -u username -p
如何hostname是本機的話,要替換為127.0.0.1或者是localhost
例子:mysql -h localhost -uroot -p
這樣輸完之後會換行讓你輸密碼,我們也可以直接把密碼寫在-p後面,當然這樣不安全。
新增新的使用者
先用root登進資料庫,然後
mysql > GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY '123456' WITH GRANT OPTION;
格式:grant 許可權 on 資料庫.* to 使用者名稱@登入主機 identified by "密碼";
mysql > flush privileges; //刷新系統許可權表
這是最基本的命令,反正還有好多選項,這個先作為一個瞭解。
修改登入密碼
在登陸進資料庫之後,可通過來修改密碼
set password = password('123456');
檢視當前所有存在的資料庫
show databases; // show出來, 不止一個數據庫這裡我們要加s
建立資料庫
create database database_name; // create是建立, 由於一次只能建立一個數據庫, 這裡database不加s, 最後接上資料庫名稱
檢視建立好的資料庫
show create database database_name\G
如果資料庫建立成功則會顯示資料庫的建立資訊
刪除資料庫
drop database database_name; // 注意這裡的刪除用的是drop, 而不是delete
使用drop database命令要特別謹慎,採用這種方式刪除之後資料庫中儲存的所有資料表和資料會一同被刪除,而且無法恢復。資料庫管理系統使用資料引擎進行建立、查詢、更新和刪除資料操作,不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能。
檢視資料庫的儲存引擎
show engines\G
Support列表示某種引擎是否能用,YES表示可以使用,NO表示不能使用,DEFAULT表示該引擎為當前預設引擎。常見的mysql引擎有:
InnoDB,MyISAM,Memory,Merge,Archive,Federated,CSV,BLACKHOLE
選擇當前資料庫
資料表屬於資料庫,在對錶進行任何操作前都要受限選擇資料庫,否則報錯"No database selected"。
use database_name;
檢視預設引擎
show variables like 'storage_engine';
建立資料表
create table <表名> (
欄位名1, 資料型別 [列級別約束條件][預設值],
欄位名1, 資料型別 [列級別約束條件][預設值],
...
[表級別約束條件] );
示例:
create table tb_emp1 (
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
檢視資料表
show tables;
建立主鍵約束
主鍵約束要求主鍵列的資料唯一,而且不允許為空,可唯一標識一條記錄,結合外來鍵還可定義不同資料表的關係,加快查詢速度。
主鍵和記錄之間的關係如同身份證和人之間的關係,一一對應。
主鍵有兩種:單欄位主鍵和多欄位聯合主鍵。
單欄位主鍵
定義列時順帶就指定了主鍵,示例:
create table tb_emp2 (
id INT(11) primary key,
name varchar(25),
deptID INT(11),
salary float
);
所有列都定義完了之後,在決定主鍵是哪個,示例:
create table tb_emp3 (
id INT(11),
name varchar(25),
deptId int(11),
salary float,
primary key(id)
);
這兩種方式的執行結果都是一樣的,都會在id欄位上設定主鍵約束
多欄位聯合主鍵
primay key(欄位1, 欄位2, ..., 欄位n)
示例:
create table tb_emp4 (
name varchar(25),
deptId INT(11),
salary float,
primary key(name, deptId)
);
使用外來鍵約束
外來鍵用來在兩個表的資料之間建立連結,它可以是一列或者多列。
一個表可以有一個或者多個外來鍵。
一個表的外來鍵可以為空值,若不為空,則每一個外來鍵值必須等於另一個表中主鍵的某個值。
外來鍵:首先是表中的一個欄位,可以不是本表的主鍵,但對應著另外一個表的主鍵。
外來鍵的作用主要是保證資料引用的完整性,定義外來鍵後,不允許刪除在另一個表中據歐關聯關係的行。
例如部門表tb_dept的主鍵是id,在員工表tb_emp5中有一個鍵deptId與這個id關聯。
主表(父表)主鍵所在那個表
從表(子表)外來鍵所在的表
建立外來鍵的語法規則如下:
[constraint <外來鍵名>] foreign key 欄位名1[, 欄位名2, ...] references <主表名> 主鍵列1[, 主鍵列2, ...]
一個表中不能有相同名稱的外來鍵,示例:建立部門表tb_dept1
create table tb_dept1 (
id int(11) primary key,
name varchar(22) not null,
location varchar(50)
);
定義資料表tb_emp5,讓它的鍵deptId作為外來鍵關聯到tb_dept1的主鍵id
create table tb_emp5 (
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float,
constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
);
子表的外來鍵必須關聯父表的主鍵,且關聯欄位的資料型別必須匹配,如果型別不一樣就會報錯。
使用非空約束
指欄位的值不能為空值,如果使用者在新增資料時沒有指定值,就會報錯。
使用非空約束的語法:欄位名 資料型別 not null;示例:
create table tb_emp6 (
id int(11) primary key,
name varchar(25) not null,
deptId int(11),
salary float
);
使用唯一性約束
唯一性約束要求該列唯一,允許出現空值,但是隻能出現一個空值
唯一性約束的語法規則,定義完列之後直接定義唯一性約束
欄位名 資料型別 unique
示例:
create table tb_dept2 (
id int(11) primary key,
name varchar(22) unique,
location varchar(50)
);
定義完所有列之後指定唯一約束:
[constraint <約束名>] unique (<欄位名>)
示例:
create table tb_dept3 (
id int(11) primary key,
name varchar(22),
location varchar(50),
constraint sth unique(name)
);
unique和primay key的區別在於:
一個表中可以有多個欄位宣告為unique,但是隻有一個primary key的宣告;
宣告為primay key的列不允許有null值,而unique允許null值存在。
使用預設約束
預設約束指定某列的預設值,如果插入新的記錄沒有為其賦值時,便會自動給該欄位賦予預設值。
預設約束的語法規則:
欄位名 資料型別 default 預設值
示例:
create table tb_emp7 (
id int(11) primary key,
name varchar(25) not null,
deptId int(11) default 1111,
salary float
);
設定表的屬性值自動增加
mysql中auto_increment的初始值是1,每新增一條記錄,欄位值自動加1.
如果突然插了一個很大的id,那麼id自動增是怎麼增的呢?
一個表只能由一個欄位使用auto_increment約束,且欄位必須為主鍵的一部分,可以是任何整數型別。
自動增加語法規則如下:
欄位名 資料型別 auto_increment
示例:
create table tb_emp8 (
id int(11) primary key auto_increment,
name varchar(25) not null,
deptId int(11),
salary float
);
檢視資料表結構
describe 表名;
desc 表名;
查看錶結構詳細語句
show create table 表名\G
這裡用\G使得資訊更加規整
mysql主要使用alter table語句修改表
修改表名
alter table <舊錶名> rename [to] <新表名>;
修改表名並不修改表結構
修改欄位的資料型別
把欄位的資料型別轉化為另一種資料型別
alter table <表名> modify <欄位名> <資料型別>
示例:
alter table tb_dept1 modify name varchar(30);
要是同時修改多個欄位資料型別怎麼辦?
修改欄位名
alter table <表名> change <舊欄位名> <新欄位名> <新資料型別>;
新的資料型別是指修改後的資料型別,如果不需要修改資料型別可以將其設定為和原來一毛一樣,但就是不能為空。
alter table tb_dept1 change location loc varchar(50);
不同資料型別在機器中的儲存方式及長度並不相同,修改資料型別可能會影響資料表中已有的資料。
因此當資料表中已經有資料時,不要輕易修改資料型別。
新增欄位
alter table <表名> add <新欄位名> <資料型別> [約束條件] [first | after 已存在的欄位名];
如果不設定first或者after引數,則預設將新加的欄位設定為資料標的最後一列。
示例:
alter table tb_dept1 add managerId INT(10);
alter table tb_dept1 add column1 varchar(12) not null;
alter table tb_dept1 add column2 int(11) first;
alter table tb_dept1 add column3 int(11) after name;
刪除欄位
alter table <表名> drop <欄位名>;
alter table tb_dept1 drop column2;
修改欄位的排列位置
alter table <表名> modify <欄位1> <資料型別> first | after <欄位2>;
alter table tb_dept1 modify column1 varchar(12) first;
alter table tb_dept1 modify column1 varchar(12) after location;
更改表的儲存引擎
alter table <表名> engine = <更改後的儲存引擎名>;
alter table tb_dept1 engine = myisam;
刪除表的外來鍵約束
alter table <表名> drop foreign key <外來鍵約束名>;
外來鍵約束名是在定義表時constraint關鍵字後面的引數。示例:受限建立表tb_emp9
create table tb_emp9 (
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float,
constraint fk_emp_dept foeign key (deptId) references tb_dept1(id)
);
alter table tb_emp9 drop foreign key fk_emp_dept;
show create table tb_emp9 \G
刪除資料表
將資料庫中已經存在的表從資料庫中刪除,刪除表的同時表的定義和表中的資料都會被刪除。
drop table一次可以刪除一個或者多個表
drop table [if exists] 表1, 表2, ..., 表n;
刪除被其他表關聯的主表
資料表存在外來鍵的情況下,如果直接刪除父表,結果會報錯。
這樣會破壞表的參照完整性,如果必須要刪除可以先刪除子表,再刪除父表。
如果要保留子表,刪除父表,則首先要解除子表的外來鍵,然後刪除父表。
示例:在資料庫中建立兩個關聯的表,首先建立表tb_dept2:
接下來建立tb_emp
create table tb_emp (
id int(11) primary key,
name varchar(25),
deptId int(11),
salary float,
constraint fk_emp_dept foreign key(deptId) references tb_dept2(id)
);