mysql ddl脚本_MySQL学习之路(1):SQL脚本语言
使用MySQL數(shù)據(jù)庫,首先安裝MySQL數(shù)據(jù)庫,本文所有SQL腳本在MySQL上測試和執(zhí)行。
安裝Mysql服務(wù)器;
安裝Mysql workbench客戶端,可以以圖形化界面管理mysql;
安裝phpMyadmin客戶端,可以通過bs方式圖形化管理Mysql;
1. Mysql服務(wù)器操作:
windows下為例,win+r 進(jìn)入cmd界面
啟動服務(wù)器:net start mysql
停止服務(wù)器:net stop mysql
連接服務(wù)器:mysql-h localhost -u root -p password
2. Database基本操作
create database db_bookstore; //創(chuàng)建數(shù)據(jù)庫:use database db_bookstore; //使用數(shù)據(jù)庫:drop database db_bookstore; //刪除數(shù)據(jù)庫:
3. DDL 表操作
(1)創(chuàng)建表
creat table table_name(id int not null auto_increment primary key,
namechar(50)
)if not exists;
(2)查看表結(jié)構(gòu)
show columns from tb_name from db_name;desc table_name;
(3)刪除表:
drop table tb_name if exists;
(4)修改表: alter tb_name alter/modify/change [column] ...
ALTER COLUMN:設(shè)置或刪除列的默認(rèn)值(操作速度非常快)
例子:
alter table film alter column rental_duration set default 5;alter table film alter column rental_duration drop default;
CHANGE COLUMN:列的重命名、列類型的變更以及列位置的移動
例子:
ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULLFIRST;ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL AFTER baz;
MODIFY COLUMN:除了不能給列重命名之外,他干的活和CHANGE COLUMN是一樣的
例子:
ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;
(5)重命名表
ALTER tb_name RENAME [AS]new_tb_name;
RENAMETABLE tb_name TO new_tb_name;
注意:[]內(nèi)的是可以選擇的,包括change,modify,alter后滿的COLUMN
4. DML語言:數(shù)據(jù)操縱語言
(1)插入
INSERT INTO tb_name(field1,...) VALUES(value1,...);
(2)修改
UPDATE tb_name SET f1=v1,f2=v2...;
(3)刪除
DELETE FROM tb_name WHERE condition
5.DQL:數(shù)據(jù)查詢,SELECT專題
SELECT f1,f2,... FROMtb_nameWHEREprimary_constraintGROUP BYgrouping_columnsORDER BY column_name DESC/ASC
HAVINGsecdonary_constraint
LIMITcount;
關(guān)鍵語法:
SELECT *
SELECT DISTINCT *
SELECT TOP count *
(1)單表查詢
SELECT * FROM tb_name; //所有字段SELECT id,name FROM tb_name; //指定字段SELECT * FROM tb_name WHERE id<5 // 查詢符合條件的字段
(2)IN, NOT IN, BETWEEN AND (這是指明字段的范圍,后面還有一個IN用于子查詢)
SELECT * FROM tb_name WHERE id IN(1,2,3);SELECT * FROM tb_name WHERE id NOT IN(1,2,3);SELECT * FROM tb_name WHERE id BETWEEN 1 AND 5;
(3)使用LIKE + 通配符
%:匹配一個或者多個字符
_: 匹配任意單個字符
SELECT * FROM tb_name WHERE user LIKE 'm%r_';// 以m開頭,中間若干個字符,r后面一個字符結(jié)尾
(4)空值查詢IS NULL,IS NOT NULL
SELECT * FROM tb_name WHERE row IS NULL;SELECT * FROM tb_name WHERE row IS NOT NULL;
(5)多條件查詢AND, OR
SELECT * FROM tb_name WHERE id=1 AND name='Jack';SELECT * FROM tb_name WHERE id=1 OR name='Jack';
(6)去掉重復(fù)行
SELECT DISTINCT * FROM tb_name;
(7)使用ORDER BY [ASC/DESC]
SELECT * FROM tb_name ORDER BY id DESC
SELECT * FROM tb_name ORDER BY id ASC
(8)GROUP BY 子句
注意:沒有出現(xiàn)在GROUP BY子句中的字段,不能出現(xiàn)在SELECT 子句中,聚合函數(shù)除外
如果SELECT 子句出現(xiàn)GROUP BY中沒有出現(xiàn)的字段,則結(jié)果只顯示每一組的一條記錄;
一般形式為:
SELECT field,func_name(field) FROM tb_name GROUP BY field;
(9)多字段分組: 2個字段的笛卡爾積
SELECT field1,field2 FROM tb_name GROUP BY field1,field2;
(10)LIMIT限制結(jié)果集
SELECT * FROM db_name WHERE id<5 LIMIT 3; //顯示結(jié)果的3行SELECT * FROM db_name WHERE id<5 LIMIT 5,10; // 從第5行開始,的10行
(11)聚合函數(shù):MIN(),AGV,MAX,COUNT
聚合函數(shù)的特點(diǎn)是根據(jù)一組數(shù)據(jù)計(jì)算出一個值,聚合函數(shù)只能對非NULL值進(jìn)行計(jì)算,NULL值被忽略;
(12)連接查詢:
理解:就是有至少2張表,查詢結(jié)果是兩張表滿足某種條件的拼接;
不帶查詢條件,則是2張表的笛卡爾積;
①內(nèi)連接查詢,最常見的是等值連接
SELECT * FROM tb_left,tb_right WHERE tb_left.id=tb_right.id;SELECT * FROM tb_left INNER JOIN tb_right WHERE tb_left.id=tb_right.id;
②外連接查詢:
左外連接: 內(nèi)連接結(jié)果,還包含不符合條件的左表數(shù)據(jù),右表相應(yīng)列加NULL
SELECT * FROM tb_left LEFT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;
右外連接:
SELECT * FROM tb_left RIGHT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;
全外連接:
SELECT * FROM tb_left FULL OUTER JOIN tb_right WHERE tb_left.id=tb_right.id;
(13)子查詢:
①IN
SELECT * FROM tb_name WHERE id IN(SELECT id FROM tb_2);
②ANY
SELECT * FROM tb_name WHERE id
③ALL
SELECT * FROM tb_name WHERE id
④EXISTS 子查詢返回一個bool值
SELECT * FROM tb_1 WHERE row>=90 AND EXISTS(SELECT * FROM tb_2 WHERE score='優(yōu)秀');// 如果有score為優(yōu)秀的記錄,則查詢 row>=90的記錄
⑤關(guān)系運(yùn)算,子查詢返回唯一值
SELECT * FROM tb_name WHERE id >(SELECT id FROM tb_2 WHERE id=1);
注:子查詢一般都是一個單列列表,SELECT list FROM tb_name; list為單列列表
使用EXISTS時候除外;
使用關(guān)系運(yùn)算符是子查詢返回唯一值;
(14)合并查詢結(jié)果
UNION: 合并查詢結(jié)果,除去相同的行
UNION ALL : 合并查詢結(jié)果,簡單的把兩個集合的元素混合
SELECT id,name UNION SELECT id,author; //正確SELECT id,name UNION SELECT id; // 錯誤,字段數(shù)目不同,無法UNION
注意:前提條件是,左邊和右邊的字段列表的字段數(shù)必須相同
6. Mysql函數(shù)
6.1 數(shù)學(xué)函數(shù)
(1)ABS(X) 取絕對值
SELECT ABS(-1); // 結(jié)果為1
(2)取整函數(shù)
CEIL(); //向上取整FLOOR(); // 向下取整
(3)隨機(jī)數(shù)生成器
RAND(); // 0-1隨機(jī)數(shù)RAND(X); // 產(chǎn)生0-1隨機(jī)數(shù),x相同時,隨機(jī)數(shù)相同
(4)符號檢測器
SIGN(X); // 返回-1,0,1作為參數(shù)的符號
(5)圓周率
SIGN(X); // 返回-1,0,1作為參數(shù)的符號
(6)小數(shù)位截?cái)嗪瘮?shù)
TRUNCATE(X,Y) // 保留x后y位小數(shù)
(7)圓整(向最近的整數(shù)靠近)
ROUND(X) //返回離X最近的整數(shù)ROUND(X,Y) //返回x,后面保留y位小數(shù),截?cái)鄷r四舍五入// 例如ROUND(3.1415,3)=3.142
(8)平方、開方
POW(X,Y) //x的y次方SQRT(X); //對x開平方
MOD(X,Y)// 求余數(shù)
(9)指數(shù)對數(shù)
EXP(X); //e的x次方LOG(X);LOG10(X);
(10)弧度角度轉(zhuǎn)換
DEGREES(radians) // 弧度---角度
RADIANS(degree) // 度數(shù)---弧度
(11)三角函數(shù)
SIN(X); //x是弧度ASIN(X);COS(X);ACOS(X);TAN(X);ATAN(X);COT(X);
6.2 字符串函數(shù)
(1)長度
CHAR_LENGTH(str);
(2)轉(zhuǎn)換大小寫
UPPER(str);UCASE(str);LOWER(str);LCASE(str);
(3)修剪函數(shù)(針對前導(dǎo)、結(jié)尾空格)
LTRIM(s);RTRIM(s);TRIM(s);//刪除引導(dǎo)空格;結(jié)尾空格;引導(dǎo)和結(jié)尾空格
TRIM(s1from s_src); //刪除s2開始和結(jié)尾處的s1
(4)替換、子串、反轉(zhuǎn)
REPLACE(s,s1,s2); //用s2替換s中的s1SUBSTRING(s,n,len); //s處n開始長度為len的字符串LEFT(s,n),RIGHT(s,n) //返回左邊或者右邊長度為n的字符串REVERSE(s); //字符串倒序
更多請參考:PHP 學(xué)習(xí)路線圖《MySQL快速入門》
6.3 日期和時間函數(shù)---------DATE
|----------TIME
(1)日期、時間
CURRENT_DATE(); // 2014-08-07
CURRENT_TIME(); // 10:30:30
(2)日期和時間(時間戳)
NOW(); // 2014-08-07 10:30:30
CURRENT_TIMESTAMP();// 2014-08-07 10:30:30LOCALTIME();// 2014-08-07 10:30:30LOCALTIMESTAMP();// 2014-08-07 10:30:30SYSDATE();// 2014-08-07 10:30:30
(3)以秒形式的時間戳
UNIX_TIMESTAMP(); //當(dāng)前UNIX時間戳
UNIX_TIMESTAMP(d);
FROM_UNIXTIME(d);
(4)年月日、時分秒
YEAR(d);MONTH(d);DAY(d);
HOUR(t);
MINUTE(t);
SECOND(t);
(5)工具函數(shù)
DATEDIFF(d1,d2) // d1-d2 的天數(shù),d1是最近的日期,d2是早些的日期
ADDDATE(d,n);
SUBDATE(d,n);
更多請參考:PHP 學(xué)習(xí)路線圖《MySQL快速入門》
6.4 條件判斷函數(shù)
6.5 系統(tǒng)信息函數(shù)
(1)版本號、連接數(shù)
VERSION(); //獲取版本
CONNECTION_ID();// 獲取連接數(shù)
(2)當(dāng)前數(shù)據(jù)庫名
DATABASE();SCHEMA(); // 當(dāng)前數(shù)據(jù)庫
(3)當(dāng)前用戶
USER();SYSTEM_USER();SESSON_USER(); //當(dāng)前用戶CURRENT_USER();
(4)字符集
CHARSET();
(5)最后插入的ID
LAST_INSERT_ID();
6.6 加密函數(shù)
MD5(str); //普通數(shù)據(jù)加密
PASSWORD(s);//不可逆加密,對用戶名加密
ENCODE(str_dst,pass_str);//用pass_str加密str_dst,返回二進(jìn)制數(shù),用blob類型存儲
DECODE(crypt_str,psss_str);// 用pass_str解密crpyt_str,加密和解密用的pass_str相同
總結(jié)
以上是生活随笔為你收集整理的mysql ddl脚本_MySQL学习之路(1):SQL脚本语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 进阶到高级_mysql的高级
- 下一篇: mysql语句导出数据库文件_通过Mys