MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發。MySQL 是最流行的關系型數據庫管理系統之一,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
@
一、MySQL數據庫是什么?
數據庫有很多種,按照時間發展來,大致分為網狀形數據庫、層次型數據庫、關系型數據庫、面向對象數據庫。其中關系數據庫是理論最成熟,應用最廣泛的數據庫。目前關系型數據庫有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL。
其中MySQL具有功能強、使用簡單、管理方便、運行速度快、可靠性高、安全保密性強等優點(而且是免費的。。。),使用得很廣泛。
二、SQL語句是什么?
SQL的全稱是 Structured Query Language ,也就是結構化查詢語言。是操作和檢索關系數據庫的標准語言,標准的SQL語言可用於操作任何關系型數據庫
通常SQL語句可分為:
查詢語言:主要有select關鍵字完成,查詢語言是SQL語言里功能最多的語句
DML語句:數據操作語言,主要由 insert、update和delete關鍵字完成
DDL語句:數據定義語言,主要由create、alter、drop和truncate四個關鍵字構成
DCL語句:數據控制語言,主要由 grant 和revoke兩個關鍵字完成,一般不用程序員完成,用的很少
事務控制語句:主要由commit、rollback、savepoint三個關鍵字完成
三、關於數據庫的基本命令
登錄數據庫(為了安全,語句中的密碼也可以先不寫)
mysql -u 用戶名 -p 密碼 ;
用戶創建新的數據庫
create database 數據庫名;
用戶刪除指定數據庫
drop database 數據庫名;
使用指定數據庫
use 數據庫名;
查看數據庫的所有表(先使用數據庫)
show tables;
查看表結構
desc 表名
四、DDL語句
DDL語句是操作數據庫對象的語句,可以創建(create)、刪除(drop)和修改(alter)數據庫對象,而最基本的數據庫對象是表(數據庫不僅僅只有表)
1. 要創建一張 test 表
編號 | 姓名 | 年齡 | 性別 |
---|
建表語句,需要約束,以保證數據的完整性,后面說,這里只是定義了表的結構,定義簡單的類型,還沒添加數據
create table test(
-- 可以有多個列定義,每列逗號分隔,最后一列沒有
test_id int , --定義第一列名為 test_id,數據為 int 類型
test_name varchar(20),--第二列名為 test_name,數據長度不超過20的字符串
test_age int,--第三列名為 test_age ,數據為 int 類型
test_gender char(1)--第四列名為 test_gender ,字符串
......
);
2. 修改表結構的語法
使用alert table ,可以增加列,修改列,刪除列,重命名等操作
增加列定義語法:
alert table test add(
-- 可以有多個列定義
test_add varchar(50)
......
);
修改列定義語法:
--將test表中的 test_id 列該成 int 類型的 test_day 列
alert table test test_age modify test_day int;
刪除列定義語法:
--將test表中的 test_day 列刪除
alert table test drop test_day;
數據表的重命名語法:
--將 test 表中的改名為 demo 表
alert table test rename to demo;
- 刪除表的語法
刪除表的語法為:drop table 表名
--例如刪除 demo 表
--drop table 表名
drop table demo;
五、數據庫的約束
在創建數據表時,不僅僅是向前面那樣指定列定義,具備數據表的基本功能,還需要增加約束,約束是在表上強制執行數據的校驗規則,可以更好的保證數據表里數據的完整性,而且,當多張表之間存在依賴關系時,還可以保護相關的數據不被刪除。
5種完整性約束(大部分數據庫都支持),可以在建表的時候指定,也可以在建表完成后再進行修改表操作,完成增加約束:
NOT NULL:非空約束,指定某列不能為空
NUIQUE:唯一約束,指定某列或者幾列組合不能重復
PRIMARY KEY:主鍵,指定該列的值可以唯一的標識該條記錄
FOREIGN KEY:外鍵,指定該行記錄從屬主表中的一條記錄,用於保證參照的完整性
CHECK:檢查,指定一個布爾表達式,用於指定對應列的值必須滿足該表達式
例如重新創建上面的 test 表
create table test(
-- 可以有多個列定義
test_id int primary key, --主鍵(唯一,默認非空)
test_name varchar(20) unique, --唯一(該表數據名字不能重復)
test_age int not null, --非空
test_gender char(1)--第四列名為 test_gender ,字符串
check(test_age>0) --CHECK約束
......
);
外鍵約束,下面創建教師表和學生表
--先創建主表
create table teacher(
t_id int auto_increment, --自動增長
t_name varchar(30) ,
primary key (t_id) --這種方式同樣可以設置主鍵
);
create table student(
s_id in auto_increment primary key,
s_name varchar(30),
--外鍵格式:foreign key(外鍵列列名) references 主表名(主表的主鍵)
foreign key(mysql_teacher) references teacher(t_id)
);
六、DML語句是什么?
DDL操作的是數據庫對象,而DML操作的是數據表里的數據,可以完成:插入新數據、修改數據、刪除數據
1. insert into 語句
往這張表插入數據("1","張無忌","24","男")
編號 | 姓名 | 年齡 | 性別 |
---|---|---|---|
語法格式: |
--insert into 表名(列1,列2...)value(列1值,列2值...);
insert into test(t_id,t_name,t_age,t_gender) value("1","張無忌","24","男");
或者可以這樣寫,省略列名,但是后面的值注意要和表的列一致
insert into test value("2","葉孤城","31","男");
結果為
編號 | 姓名 | 年齡 | 性別 |
---|---|---|---|
1 | 張無忌 | 24 | 男 |
2 | 葉孤城 | 31 | 男 |
2. update 語句
用於修改數據表的記錄,通過使用 where 限定條件,省略 where 條件會將該表該列同時修改,比如將上表的張無忌年齡改成30
語法格式為:
--update 表名 set 列名=30 where 條件;
update test set t_age=30 where t_id=1;
3. delete from語句
用於刪除指定數據表的記錄,不需要指定列名,因為是整行刪除,后面可以用 where 指定記錄,當不寫where條件時,整張表數據都被刪除
語法格式為:
--刪除test表中 t_id等於1的記錄
--delete from 表名 [ where 條件 ]
delete from test where t_id=1;
七、功能最豐富的查詢語句
select語句的功能就是查詢數據,也是SQL語句里面功能最豐富的語句,select不僅可以單表查詢,還可以多表查詢、子查詢等
1. 單表查詢
查詢語句:
--查詢 test表所有age大於20的數據的id和名字
select t_id,t_name from test where t_age > 20;
--查詢 tes 表所有 age大於20的所有數據
select * from test where t_age > 20;
--將在test表中查詢到的 t_name 拼接上 "拼接的內容"
select concat(t_name,"拼接的內容") from test;
2. 分組查詢
查詢語句:
--將查詢到的數據按照gender分組
select * from student group by gender;
3. 多表查詢
查詢語句:
--查詢 teacher(教師表)和student(學生表)為男性的數據
select * from teacher,student where gender="男";
去除重復行:distinct
--就算有同名,也只會顯示一個名字
select distinct nane from teacher where gender="男";
自然連接查詢:natural join (自然連接查詢會以兩表中同名列作為連接條件)
--查詢兩張表中,學生表的全部和教師表的名字,語句中的student s ,用於簡寫,前面可以用 s 表示student表,因為先運行后面的代碼
select s.*,t.t_name from student s natural join teacher t;
on 子句查詢:也是很常用的連接方式
--join 連接另一張表,使用 on 來指定條件
select student.s_name,course.* from student join course on student.s_id = course.c_id;
4. 子查詢
子查詢其實就是在查詢語句中嵌套另外一個查詢,子查詢可以多層嵌套
--將(select * from teacher)當成數據表來用
select * from (select * from teacher) where age>20;