mysql爲結構化查詢語言
數據庫設計的範式:減小數據冗餘或儘可能消除冗餘的小active 規範
設計數據庫:normal form 範式 維基百科上
約束:
主鍵 :primary key 定義字段主鍵,不容許重複,惟一性,只能有一個,不能爲空
外鍵 :foreign key 定義表與表之間的 一個表中的字段在另外一表中必須出現--->引用完整性
惟一鍵:unique key 表中的某一字段不相同或爲空
檢查性:否字段定義範圍,目前mysql不支持
候選鍵,key
sql語句類型:
DDL:數據的定義語言
DML:數據的操做語言
MCL:數據庫控制語言
字段類型:INT 整型 1字節 BIGINT 8字節 TINYINT MEDIUMINT UNSIGNED
FLOAT 浮點型
BIT 位
DOUBLE 單精度
CHAR (10) 字符型 固定每一個字段就是10這麼長 0-255
VARCHAR (10) 靈活性 長度與實際相符
BLOB 二進制存儲數據 使用與長篇 TUNYBLOB
TEXT MEDIUMTEXT LONGTEXT
TIME 時間 3字節
DATE 日期 3字節
YEAR 年
DATETIME 時間日期 TIMESTAMP 佔得空間小
yy-mm-dd hh:mm
ENUM 65535中組合,SET 最多64組合 枚舉類型
boolean type 布爾類型
mysqld 是一個運行在服務端的進程,mysql是一個調用mysqld運行在客戶端的命令行工具
客戶端命令行:mysql >
建立表: create table 表名 (字段名 類型)
create table books ( id INT,name VARCHAR(255));
DESCRIBE books 查看錶信息
CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ); 保存在依然能夠建立 會有警告
CREATE TABLE books2 SELECT * from course WHERE id < 100 從另外表中建立 至關於複製 只會複製數據
CREATE TABLE books3 LIKE books; 建立books3和books格式同樣 數據和屬性都同樣
額外的表命令:
COMMENT 顯示註釋信息
CREATE TABLE IF NOT EXISTS books ( name VARCHAR(20) ) COMMENT 'books info';
DELAY_KEY_WRITE 加速
表數據的插入: insert into books values('01','xin');
insert into books values('01','xin'),('02','jing'); 批量插入
insert into books(name) values('long'),('jing') 單獨爲某一個字段插入數據
insert into books2 SELECT * FROM books; 查詢已有表插入數據
insert into books set name='hua'; set插入數據
查看: select * from books
數據能夠重複 要數據惟一性能夠:
ALTER TABLE books ADD UNIQUE KEY (name);books表中name不容許重複
REPLACE insert into books(name) values('long') 至關於將內容覆蓋從新寫 能夠實現修改某一個字段
表數據的修改: UPDATE books SET name=wei WHERE name=hua;
UPDATE books SET id=id+1 ORDER BY id LIMIT 3 排序並限定前3行加1
表數據的刪除: DELETE FROM books WHERE name=hua;刪除books表中name爲hua的
sql語句的使用:
表:關係描述
修改表中已有的字段 :ALTER TABLE 表名 CHANGE 老字段 新字段 字段類型;
ALTER TABLE books CHANGE id id INT UNSIGNED;
ALTER TABLE books CHANGE id id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT數字自動加;
新增字段: ALTER TABLE books ADD intime DATETIME NOT NULL DEFAULT '
2011-02-11
'; 增長入庫時間intime
ALTER TABLE books ADD pubtime DATETIME NOT NULL AFTER|FIRST name; 新曾一行到固定位置
刪除字段: ALTER TABLE books intime
刪除表: DROP TABLE books
清空表: TRUNCATE TABLE books
修改表名字:1、 ALTER TABLE books RENAME books2;
2、RENAME TABLE books2 TO books;
查看錶信息: DESC TABLES;
查看錶建立的過程:SHOW CREATE TABLE books
查詢:支持正則表達式 邏輯表達式 &&(and) ||(or) 異或
SELECT 字段 AS 別名 FROM 表名 select name as BOOKS from books 重命名字段名並查詢
SELECT DISTINCT startime FROM course;數據重複時只顯示一行
範圍內查詢:
select * from course where id>1 and id<5
select * from course where id between 1 and 4 大於等於1小於等於4
select * from course where id in (1,2,4) id爲1 、2、 4 的
like查詢:
select * from course where course LIKE 'ha%' 以ha開頭的數據
select * from course where course LIKE 'Li_rh033'
select * from course where
排序查詢:
SELECT DISTINCT startime FROM course ORDEY BY startime 排序相同的顯示一條記錄
SELECT DISTINCT startime FROM course ORDEY BY startime DESC 降序排列
SELECT * FROM course GROUP BY startime 以startime分組
SELECT startime FROM course GROUP BY startime
SELECT startime FROM course GROUP BY startime HAVING COUNT(*)>1; 對分完組再進行限制輸出
HAVING COUNT 要與GROUP BY 連用
聚合函數:HAVING COUNT
函數查詢:
SELECT COUNT(*) FROM course 總的數據行數
SELECT MAX(id) FROM course id最大的 MIN 最小 AVG 平均
限制查詢:
select * from course limit 2 顯示前兩行數據;
select * from course order by id desc limit 2; 後兩行
select * from course order by id limit 2; 排序限制
select * from course order by id limit 2,2; 從第2行開始顯示後兩行
多表查詢:
表 sru 數據 name age sex course course 數據 id course statime
sara 20 f 1 rh033
2011-08-08
terra 20 m 2 rh253
2011-05-08
tom 45 m 4 mysql
2011-08-12
交叉 :內鏈接 外鏈接 (左外 右外 自鏈接) UNION鏈接
UNION 將錶鏈接起來 排序時要有括弧括起來:
(select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2);
(select * from course order by id limit 2) UNION (select * from course2 order by id desc limit 2) ORDER BY id;
交叉鏈接:
內鏈接:多個表中由相同的字段創建鏈接關係
select name, course.course from stu, course where stu.course=course.id;
select s.name, c.course from stu as s,course as c where s.course=c.id; 取別名
外鏈接:左外 join on 多個表
SELECT * FROM stu as s left join course as c on s.course=c.id;where age > 20;
右外 join on
SELECT * FROM stu as s right join course as c on s.course=c.id where s.sex='m';
自鏈接 inner join y 一個表中
select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2;
select s1.name as HOME, s2.name as CURT from stu as s1 inner join stu as s2 where s1.name <> s2.name;
子查詢:多的查詢條件 一個查詢是針對另外一個查詢的結果進行的
select name,course from stu where sex='m' and course=rh033;
select name from stu where course=(select id from course='luoyingfa') 等號後的查詢的返回結果要爲一個
select s1.name from (select * from stu where sex='m') as s1 where s1.course='2' from後用子查詢要起別名
in 使用子查詢:
select s.name from stu as s where s.course in (select id from course where course like 'L%');
select name from stu where course in (select id from course where startdate>'
2010-11-01
');