SQL(strucut query language)java
DDL (數據庫定義語言)
DML (數據庫操做語言)
DCL (數據庫的控制語言)
DTL (數據庫的高級語言)
查看版本的函數
select version();
查看日期的函數 (只顯示當前的日期)
select curdate();
查看時間的函數
select curtime();
查看日期+時間的函數
select now();
查看字節數(若是是中文的話則會根據不一樣的字符集來輸出相關的的內容)
select length('abc');
查看當前的內容
select char_length('');
查看當前使用的數據庫
select database();
數據庫的引擎
1.myisam
2.innodb(新版本的默認的引擎)
查看默認的引擎
show engines;
建立一個數據庫 (若是這個數據庫不存在的狀況下才建立 名稱爲aa)
create database if not exists aa;
mysql> create database if not exists aa;
Query OK, 1 row affected (0.00 sec)
--------------------------------------------------------
對於已經創建成的表進行 CURD操做
命名+table +表名+動做 +執行的內容mysql
1.重命名一個表
alter table bro_jiaoban rename bro_zhilei;linux
2.添加一個新屬性
ALTER TABLE bro_jiaoban ADD AGE VARCAHR(200);正則表達式
3. 刪除一個列
ALTER TABLE bro_jiaoban DROP COLUMN link;算法
4.修改屬性的數據類型
ALTER TABLE bro_jiaoban MODIFY teacher varchar(100);sql
5.對於一個列名進行重命名 (後面的數據的類型必定要加 若是不加的話 則會報錯)
ALTER TABLE bro_jiaoban CHANGE COLUMN age nianling varchar(300);數據庫
6.查看系統中狀態
show variables like "characeter_%"
show variables like "colletction_%"windows
7.查看系統中惟一值
select distinct name from jiankong;安全
8. 添加用戶
create user zhilei identified by "password";
刪除用戶
drop user zhilei ;tcp
9.若是能於一個表進行受權
grant all privileges on *.* to "user1"@"%"" identified by "";
(注意:這個過程會加一個受權的用戶,用要給這個用戶與受權的host給單引號或者是雙引號)
10.改變密碼
1.若是改變當前登陸賬戶的密碼的話
set password =password('123');
2.若是改變其它的賬密碼的話則要用
set password for "user1" =password('124');
12.刪除查詢語句中的重複項
distinct
英 [dɪˈstɪŋkt] 美 [dɪˈstɪŋkt]
adj. 明顯的,清楚的; 卓越的,不尋常的; 有區別的; 確切的
mysql> SELECT * FROM score;
+-----+---------+-------+---------+
| id | english | yuwen | teacher |
+-----+---------+-------+---------+
| 4 | 19 | 29 | zhilei |
| 5 | 39 | 45 | yinchao |
| 101 | 39 | 45 | yinchao |
| 102 | 39 | 45 | yinchao |
| 103 | 39 | 45 | yinchao |
| 104 | 39 | 45 | yinchao |
| 105 | 39 | 45 | yinchao |
+-----+---------+-------+---------+
7 rows in set (0.00 sec)
mysql> SELECT DISTINCT teacher FROM score;
+---------+
| teacher |
+---------+
| zhilei |
| yinchao |
+---------+
2 rows in set (0.00 sec)
mysql>
字符集設置
latin Big5(繁體中文) BG2312 UTF8
默認的編碼是
character set: latin1
collation :latin1_swedish_ci
查看默認的支持編碼的種類
show character set;
mysql> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+----------+-----------------------------+---------------------+--------+
40 rows in set (0.00 sec)
在建立數據庫的時候設置默認的字符編碼
DEFAULT CHARACTER SET utf8
DEFATULT COLLATE utf8_genereal_ci;
例:
mysql> create database jiankong
-> default character set utf8
-> default collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
若是修改已經存在的數據庫的字符集的話(沒有default)
mysql> alter database work character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
------------------------------------------------
數據庫配置文件的字符集設置
客戶端的字符集
[client]
defalut-character-set=utf8
服務端的字符集
[mysqld]
defalut-character-set=utf8
collation-server=utf8_general_ci;
init-connect="SET NAMES utf8"
character-set-server=utf8
[mysql]
高級的查詢
符號有這樣的幾個
=
>
>=
<
<=
in
like 後面配置%來使用 通配符的意思 表示0個或者是多個的字符
between
and
or
group by "one";
having
查詢功能的順序
where
--分頁
limit
--排序
正序(從小到大)
order by asc;
倒序 (從大到小)
order by desc;
聚合函數
求總個數
count();
求平均數
avg();
mysql> select sname from cf where english >(select avg(english) from cf) ;
+----------+
| sname |
+----------+
| zhilei |
| huangkai |
| maweiqi |
+----------+
求最大的值
max();
求最小的值
min();
求總和
sum();
分頁
mysql> select * from score;
+-----+---------+-------+-----------+
| id | english | yuwen | teacher |
+-----+---------+-------+-----------+
| 4 | 19 | 29 | zhilei |
| 5 | 39 | 45 | yinchao |
| 101 | 39 | 45 | yinchao |
| 102 | 39 | 45 | yinchao |
| 103 | 39 | 45 | yinchao |
| 104 | 39 | 45 | yinchao |
| 105 | 39 | 45 | yinchao |
| 106 | 34 | 43 | zongbin |
| 107 | 4 | 3 | huangkai |
| 108 | 33 | 67 | 志雷 |
| 109 | 33 | 67 | 張三 |
| 110 | 33 | 67 | 李四 |
| 111 | 22 | 90 | 王五 |
| 112 | 22 | 90 | 王志五 |
| 113 | 22 | 90 | 王三志 |
+-----+---------+-------+-----------+
limita b
----------------------------------
n表明第幾頁,b表明一頁顯示的個數
a=n*b-b
a=b*(n-1)
1.數據的插入
1.選擇字段插入
數據庫的插入 先取出想插入數據的字段,再一一的賦值
insert into score ('host' ,"user","password") values("");
2.總體的插入(若是id爲自增的話)
insert into score values(null,"","");
數據的類型
---------------------------------------------------
1.字符串
2.數值型
3.日期型
4. null
------------------------
合計函數 (合計函數不能與where一塊兒使用 可是能和having一塊兒使用)
1.sum()
2.max()
3.min()
4.count()
5.avg()
合計函數與having一塊兒使用
1.select name 姓名 from ks having max(yingyu);
查詢英語的總合是與對應的姓名的同窗,並再作一個過濾就是總合大於60分的
2.select name 姓名,sum(yingyu) from ks group by name having sum(yingyu)>60;
show 用法
1. show databases;
2. show tables;
3. show variables like "character%"
4. show variables like "collaction%"
5. show engines; (查看全部的引擎)
配置文件
windows my.ini
(linux/nuix) my.cnf
修改庫與表的結構的內容的是
alter
如查修改表中的內容的話則用
update
-------------------------
數據的類型
表的建立
create table test(
id int not null auto_increment ,
primary key(id)
)
------------------------
unsignedl (無符號的(也就是沒有負數))
zerefull (零填充)
comment (對於字段的描述 至關於註釋)
CREATE TABLE tt(
id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT COMMENT "學生ID" ,
NAME VARCHAR(30),
PRIMARY KEY(id)
);
增長外鍵
constraints foreign key(std) references stdentd('id');
------------
SHOW TABLES;
查看詳細的字段的信息
SHOW FULL COLUMNS FROM tt;
(注意:not null 要寫在unsigned zerofill 的後面)
DROP TABLE tt;
SHOW TABLES;
CREATE TABLE tt(
id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT "學生id",
sname VARCHAR(40) COMMENT "學生姓名",
sex VARCHAR(40) COMMENT "學生的性別")ENGINE=INNODB DEFAULT CHARSET utf8 AUTO_INCREMENT=11 COMMENT "學生信息表";
DROP TABLE tt;
SHOW FULL COLUMNS FROM tt;
(zerefill) 注意是:fill
(show full columns from kk) 注意是:full
(select * from kk ) 注意:是from 並非form
查看建立數據庫的信息
show create database work;
查看錶建立的數據
show create table aa;
查看索引
show triggers from work;
查看一個用戶的權取(grant 要加s)
show grants for username
mysql的數據類型
-----------------------
1.數值型
a.整型
微整型 tinyint(-128-127)
小整型 smallint
中整型 mediumint
大整型 bigint
b.浮點型
decimal(6,2) --表明
2.日期
3.字符串
對於數據表的重命名的兩種方法
第一種:rename table one to two
第二種:alter table test rename to one;
改變表引擎
ALTER TABLE t1 ENGINE = InnoDB;
改變一個表自增的起始的值
ALTER TABLE t2 AUTO_INCREMENT = value;
刪除一個表中的某些列
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
對錶中一列進行重命名並加更多的條件
ALTER TABLE t1 CHANGE a b INTEGER;
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
改變列的屬性
ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
更改表的字符集
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
索引
1.主鍵索引
2.惟一索引
unique key(字段名);
3.普通索引
第一種的狀況
CREATE TABLE IF NOT EXISTS tt(
id MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(30) COMMENT "學生名稱",
sex VARCHAR(30) UNIQUE, //創建惟一索引 也能夠用 unique key(sname)
KEY aa(sname); //第一步要指定索引的名稱,再指定索引的列
第二種的狀況
若是表已經建立完成,但沒有創建索引的話,能夠用
create index aa on 表(字段1,字段2);
刪除索引的
drop index aa on 表名; 這樣就能夠了。
4.全文件索引 fulltext
create table book(
id tinyint unsigned not null auto_cerement
);
/
刪除全部的記錄
delete from s;
刪除的時候不記日誌,自增的編號從頭開始,速度快
刪除時不記日誌,不觸發刪除
truncate ss;
總結修改操做:
----------------------------------------
查看錶的字段信息:desc 表名;
查看錶的全部信息:show create table 表名;
添加主鍵約束:alter table 表名 add constraint 主鍵 (形如:PK_表名) primary key 表名(主鍵字段);
添加外鍵約束:alter table 從表 add constraint 外鍵(形如:FK_從表_主表) foreign key 從表(外鍵字段) references 主表(主鍵字段);
(alter table 主表名 add foreign key (字段 ) references 從表名(字段) on delete cascade)
添加惟一約束:
ALTER table 表名 add unique key 約束名 (字段);
刪除主鍵約束:alter table 表名 drop primary key;
刪除外鍵約束:alter table 表名 drop foreign key 外鍵(區分大小寫);
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);
刪除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table bbb change nnnnn hh int;
修改列名SQLServer:exec sp_rename't_student.name','nn','column';
修改列名Oracle:alter table bbb rename column nnnnn to hh int;
修改列屬性:alter table t_book modify name varchar(22);
sp_rename:SQLServer 內置的存儲過程,用與修改表的定義。
mysql函數:
-- 定義函數
delimiter //
create function two(a int)
returns int -- 注意必定要有返回值
begin
return a*a;
end//
-- 再將結束符號定義爲分號
delimiter ;
-- 刪除函數
drop function one;
-- 調用函數
select two(4);
mysql存儲過程:
----------------------------------------
-- mysql存儲過程
show tables;
desc t;
select tname 姓名 from t where id=3;
delimiter //
create procedure shuchu(a int) -- 數據的類型必定要加
begin
select * from t where id=a ;
end
//
delimiter ;
call shuchu(2);
-- 建立好存儲過程後 咱們用call關鍵字來調用
call charu("one");
drop procedure charu;
select * from t;
alter table t add sscore int;
call shuchu();
drop procedure shuchu;
update t set tgender="男" where tname="ABC";
-- 優勢:存儲過程較快,且具有必定的安全性
call shuchu(3)
mysql事件:
------------------------------------
-- 查看事件狀態
show variables like "event_scheduler";
-- 開啓事件
set global event_scheduler=on;
-- 第二種開啓事件方式
set global event_scheduler=1;
-- 關閉事件
set global event_scheduler=0;
-- 第二種關閉事件方法
刪除事件:
drop event 事件名稱
關閉事件
alter event a a on scheduler disables / enable
set global event_scheduler=off;
-- 建立事件
create event aa on schedule every 1 second
do
insert into t1 (tname) values('zhilei');
show tables;
select * from t1;
mysql跳過受權表:
---------------------------------------------
第一步:終止進程
pkill mysql
第二步:運行
mysqld_safe --skip-grant-tables &
第三步: 用root賬號登陸 並改改密碼(若是root密碼給忘記了 進去後只能經過這樣的方式執行)
update mysql.user set password =password('kkk') where user="root";
若是root用戶被刪除:
----------------------------------------------
.中止數據庫,並在mysql配置文件my.cnf中添加skip-grant-tables參數到[mysqld]配置塊中
執行如下命令:./mysql.server stop
2.啓動數據庫,添加root用戶,並授予權限,啓動數據庫後,能夠以密碼登錄,並插入一條添加用戶名爲root的命令,命令執行以下:
1,./mysql.server start
2,./mysql -p
3,insert into user set user=’root’,ssl_cipher=」,x509_issuer=」,x509_subject=」;
添加完成後,對該root用戶更新權限,更新權限命令以下:
update user set Host='%',select_priv='y', insert_priv='y',update_priv='y', Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';
執行完成後,執行quit 退出數據庫。
3.重啓數據庫並更新root密碼
執行完添加與更新root用戶權限後,可使用命令:
./mysql.server restart 來重啓數據庫
利用./mysql -p 命令無密碼登錄進入數據庫,執行如下命令:
update mysql.user set password=password('newpassword') where user='root'
#將password()中的newpassword字符更改成你本身的密碼
執行完成後,記得刷新權限:
4.註釋掉skip-grant-tables參數,重啓數據庫
權限刷新完成後,修改mysql的配置文件my.cnf,註釋或刪除掉添加的skip-grant-tables參數,而後利用命令:
./mysql.server restart 重啓數據庫便可
flush privileges;
5.重啓MYSQL就可使用ROOT用戶了。
mysql數據類型:
------------------------------------------------
MySQL數據類型格式及長度
標籤: mysql數據類型
2012-03-06 21:31 8087人閱讀 評論(0) 收藏 舉報
分類:
MySQL(31)
目錄(?)[+]
數值類型
MySQL 的數值數據類型能夠大體劃分爲兩個類別,一個是整數,另外一個是浮點數或小數。許多不一樣的子類型對這些類別中的每個都是可用的,每一個子類型支持不一樣大小的數據,而且 MySQL 容許咱們指定數值字段中的值是否有正負之分或者用零填補。
表列出了各類數值類型以及它們的容許範圍和佔用的內存空間。
類型
大小
範圍(有符號)
範圍(無符號)
用途
TINYINT
1 字節
(-128,127)
(0,255)
小整數值
SMALLINT
2 字節
(-32 768,32 767)
(0,65 535)
大整數值
MEDIUMINT
3 字節
(-8 388 608,8 388 607)
(0,16 777 215)
大整數值
INT或INTEGER
4 字節
(-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
大整數值
BIGINT
8 字節
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
極大整數值
FLOAT
4 字節
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)
0,(1.175 494 351 E-38,3.402 823 466 E+38)
單精度
浮點數值
DOUBLE
8 字節
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
雙精度
浮點數值
DECIMAL
對DECIMAL(M,D) ,若是M>D,爲M+2不然爲D+2
依賴於M和D的值
依賴於M和D的值
小數值
INT 類型
在 MySQL 中支持的 5 個主要整數類型是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。這些類型在很大程度上是相同的,只有它們存儲的值的大小是不相同的。
MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標準進行擴展,這樣當從數據庫檢索一個值時,能夠把這個值加長到指定的長度。例如,指定一個字段的類型爲 INT(6),就能夠保證所包含數字少於 6 個的值從數據庫中檢索出來時可以自動地用空格填充。須要注意的是,使用一個寬度指示器不會影響字段的大小和它能夠存儲的值的範圍。
萬一咱們須要對一個字段存儲一個超出許可範圍的數字,MySQL 會根據容許範圍最接近它的一端截短後再進行存儲。還有一個比較特別的地方是,MySQL 會在不合規定的值插入表前自動修改成 0。
UNSIGNED 修飾符規定字段只保存正值。由於不須要保存數字的正、負符號,能夠在儲時節約一個「位」的空間。從而增大這個字段能夠存儲的值的範圍。
ZEROFILL 修飾符規定 0(不是空格)能夠用來真補輸出的值。使用這個修飾符能夠阻止 MySQL 數據庫存儲負值。
FLOAT、DOUBLE 和 DECIMAL 類型
MySQL 支持的三個浮點類型是 FLOAT、DOUBLE 和 DECIMAL 類型。FLOAT 數值類型用於表示單精度浮點數值,而 DOUBLE 數值類型用於表示雙精度浮點數值。
與整數同樣,這些類型也帶有附加參數:一個顯示寬度指示器和一個小數點指示器。好比語句 FLOAT(7,3) 規定顯示的值不會超過 7 位數字,小數點後面帶有 3 位數字。
對於小數點後面的位數超過容許範圍的值,MySQL 會自動將它四捨五入爲最接近它的值,再插入它。
DECIMAL 數據類型用於精度要求很是高的計算中,這種類型容許指定數值的精度和計數方法做爲選擇參數。精度在這裏指爲這個值保存的有效數字的總個數,而計數方法表示小數點後數字的位數。好比語句 DECIMAL(7,3) 規定了存儲的值不會超過 7 位數字,而且小數點後不超過 3 位。
忽略 DECIMAL 數據類型的精度和計數方法修飾符將會使 MySQL 數據庫把全部標識爲這個數據類型的字段精度設置爲 10,計算方法設置爲 0。
UNSIGNED 和 ZEROFILL 修飾符也能夠被 FLOAT、DOUBLE 和 DECIMAL 數據類型使用。而且效果與 INT 數據類型相同。
字符串類型
MySQL 提供了 8 個基本的字符串類型,能夠存儲的範圍從簡單的一個字符到巨大的文本塊或二進制字符串數據。
類型
大小
用途
CHAR
0-255字節
定長字符串
VARCHAR
0-65536字節
變長字符串
TINYBLOB
0-255字節
不超過 255 個字符的二進制字符串
TINYTEXT
0-255字節
短文本字符串
BLOB
0-65 535字節
二進制形式的長文本數據
TEXT
0-65 535字節
長文本數據
MEDIUMBLOB
0-16 777 215字節
二進制形式的中等長度文本數據
MEDIUMTEXT
0-16 777 215字節
中等長度文本數據
LOGNGBLOB
0-4 294 967 295字節
二進制形式的極大文本數據
LONGTEXT
0-4 294 967 295字節
極大文本數據
CHAR 和 VARCHAR 類型
CHAR 類型用於定長字符串,而且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格做填補。
CHAR 類型可使用 BINARY 修飾符。當用於比較運算時,這個修飾符使 CHAR 以二進制方式參於運算,而不是以傳統的區分大小寫的方式。
CHAR 類型的一個變體是 VARCHAR 類型。它是一種可變長度的字符串類型,而且也必須帶有一個範圍在 0-255 之間的指示器。CHAR 和 VARCHGAR 不一樣之處在於 MuSQL 數據庫處理這個指示器的方式:CHAR 把這個大小視爲值的大小,不長度不足的狀況下就用空格補足。而 VARCHAR 類型把它視爲最大值而且只使用存儲字符串實際須要的長度(增長一個額外字節來存儲字符串自己的長度)來存儲值。因此短於指示器長度的 VARCHAR 類型不會被空格填補,但長於指示器的值仍然會被截短。
由於 VARCHAR 類型能夠根據實際內容動態改變存儲值的長度,因此在不能肯定字段須要多少字符時使用 VARCHAR 類型能夠大大地節約磁盤空間、提升存儲效率。
VARCHAR 類型在使用 BINARY 修飾符時與 CHAR 類型徹底相同。
TEXT 和 BLOB 類型
對於字段長度要求超過 255 個的狀況下,MySQL 提供了 TEXT 和 BLOB 兩種類型。根據存儲數據的大小,它們都有不一樣的子類型。這些大型的數據用於存儲文本塊或圖像、聲音文件等二進制數據類型。
TEXT 和 BLOB 類型在分類和比較上存在區別。BLOB 類型區分大小寫,而 TEXT 不區分大小寫。大小修飾符不用於各類 BLOB 和 TEXT 子類型。比指定類型支持的最大範圍大的值將被自動截短。
日期和時間類型
在處理日期和時間類型的值時,MySQL 帶有 5 個不一樣的數據類型可供選擇。它們能夠被分紅簡單的日期、時間類型,和混合日期、時間類型。根據要求的精度,子類型在每一個分類型中均可以使用,而且 MySQL 帶有內置功能能夠把多樣化的輸入格式變爲一個標準格式。
類型
大小
(字節)
範圍
格式
用途
DATE
3
1000-01-01/9999-12-31
YYYY-MM-DD
日期值
TIME
3
'-838:59:59'/'838:59:59'
HH:MM:SS
時間值或持續時間
YEAR
1
1901/2155
YYYY
年份值
DATETIME
8
1000-01-01 00:00:00/9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和時間值
TIMESTAMP
4
1970-01-01 00:00:00/2037 年某時
YYYYMMDD HHMMSS
混合日期和時間值,時間戳
DATE、TIME 和 TEAR 類型
MySQL 用 DATE 和 TEAR 類型存儲簡單的日期值,使用 TIME 類型存儲時間值。這些類型能夠描述爲字符串或不帶分隔符的整數序列。若是描述爲字符串,DATE 類型的值應該使用連字號做爲分隔符分開,而 TIME 類型的值應該使用冒號做爲分隔符分開。
須要注意的是,沒有冒號分隔符的 TIME 類型值,將會被 MySQL 理解爲持續的時間,而不是時間戳。
MySQL 還對日期的年份中的兩個數字的值,或是 SQL 語句中爲 TEAR 類型輸入的兩個數字進行最大限度的通譯。由於全部 TEAR 類型的值必須用 4 個數字存儲。MySQL 試圖將 2 個數字的年份轉換爲 4 個數字的值。把在 00-69 範圍內的值轉換到 2000-2069 範圍內。把 70-99 範圍內的值轉換到 1970-1979 以內。若是 MySQL 自動轉換後的值並不符合咱們的須要,請輸入 4 個數字表示的年份。
DATEYIME 和 TIMESTAMP 類型
除了日期和時間數據類型,MySQL 還支持 DATEYIME 和 TIMESTAMP 這兩種混合類型。它們能夠把日期和時間做爲單個的值進行存儲。這兩種類型一般用於自動存儲包含當前日期和時間的時間戳,並可在須要執行大量數據庫事務和須要創建一個調試和審查用途的審計跟蹤的應用程序中發揮良好做用。
若是咱們對 TIMESTAMP 類型的字段沒有明確賦值,或是被賦與了 null 值。MySQL 會自動使用系統當前的日期和時間來填充它。
複合類型
MySQL 還支持兩種複合數據類型 ENUM 和 SET,它們擴展了 SQL 規範。雖然這些類型在技術上是字符串類型,可是能夠被視爲不一樣的數據類型。一個 ENUM 類型只容許從一個集合中取得一個值;而 SET 類型容許從一個集合中取得任意多個值。
ENUM 類型
ENUM 類型由於只容許在集合中取得一個值,有點相似於單選項。在處理相互排拆的數據時容易讓人理解,好比人類的性別。ENUM 類型字段能夠從集合中取得一個值或使用 null 值,除此以外的輸入將會使 MySQL 在這個字段中插入一個空字符串。另外若是插入值的大小寫與集合中值的大小寫不匹配,MySQL 會自動使用插入值的大小寫轉換成與集合中大小寫一致的值。
ENUM 類型在系統內部能夠存儲爲數字,而且從 1 開始用數字作索引。一個 ENUM 類型最多能夠包含 65536 個元素,其中一個元素被 MySQL 保留,用來存儲錯誤信息,這個錯誤值用索引 0 或者一個空字符串表示。
MySQL 認爲 ENUM 類型集合中出現的值是合法輸入,除此以外其它任何輸入都將失敗。這說明經過搜索包含空字符串或對應數字索引爲 0 的行就能夠很容易地找到錯誤記錄的位置。
SET 類型
SET 類型與 ENUM 類型類似但不相同。SET 類型能夠從預約義的集合中取得任意數量的值。而且與 ENUM 類型相同的是任何試圖在 SET 類型字段中插入非預約義的值都會使 MySQL 插入一個空字符串。若是插入一個即有合法的元素又有非法的元素的記錄,MySQL 將會保留合法的元素,除去非法的元素。
一個 SET 類型最多能夠包含 64 項元素。在 SET 元素中值被存儲爲一個分離的「位」序列,這些「位」表示與它相對應的元素。「位」是建立有序元素集合的一種簡單而有效的方式。而且它還去除了重複的元素,因此 SET 類型中不可能包含兩個相同的元素。
但願從 SET 類型字段中找出非法的記錄只需查找包含空字符串或二進制值爲 0 的行。
mysql用戶管理:
----------------------------------------------------`
-- mysql權限管理篇
-- 查看系統中的用戶
select user,host,password from mysql.user;
-- 創建帳號並指定登陸地址,只有登陸的權限,並無其它的操做的權限
create user "admin"@"localhost" identified by "kkk";
-- 若是在建立用戶不指定登陸主機的時候 ,則默認的狀況是全部的主機都是能夠訪問的
create user zongbin identified by "kkk";
-- 這樣的建立的話,任何主機都是可用登陸,且不須要密碼,可是也沒有相關的操做的權限
create user zhilei;
-- 刷新權限表
flush privileges;
-- 定義查看的權限
grant select on work.t1 to zhilei;
-- 去掉權限
revoke select on work.t1 from zhilei;
-- 查看當前的用戶
select user();
grant all privileges on *.*
mysql觸發器
------------------------------------
-- 新建觸發器
show tables;
create table t1(
id int not null auto_increment,
tname varchar(20),
sscore tinyint unsigned,
primary key(id))engine=innodb default charset=utf8
create table t2 like t1;
show tables;
desc t1;
desc t2;
insert into t1 values(null,'小明',30);
insert into t1 values(null,'小黃',60);
insert into t1 values(null,'小殷',56);
insert into t1 values(null,'小馬',37);
insert into t1 values(null,'小宗',67);
insert into t1 values(null,'小錢',99);
select * from t1;
select * from t2;
delimiter //
-- 定認插入觸發器
create trigger charu after insert on t1 for each row
begin
if new.sscore <60 then
insert into t2 select * from t1 where new.id = t1.`id`;
end if; -- end if 結尾要有分號
end//
delimiter ;
-- ###########################################################
-- 定義刪除觸發器
delimiter //
create trigger shanchu after delete on t1 for each row
begin
delete from t2 where id = old.id;
end//
delimiter ;
-- ###################################################
-- 定義修改觸發器
delimiter //
create trigger xiu after update on t1 for each row
begin
if old.sscore >60 then
if new.sscore <60 then
insert into t2 select * from t1 where t1.`id`=new.id;
end if;
else
if new.sscore > 60 then
delete from t2 where id=new.id;
else
replace into t2 select * from t1 where t1.`id`=new.id;
end if;
end if;
end//
delimiter ;
select * from t1;
select * from t2;
update t1 set sscore=56 where id=1;
mysql總結性操做:
--------------------------------------------
時間的數據類型
datetime 日期+時間 (日期要以 2001-4-4 3:4:5
date 日期
time
timestamp 它是一人時間戳 會隨時的更新,只要你操做就會更新
1.查看有哪些的數據庫
show databases;
2.使用哪一個數據庫
use work
3. 查看哪一個數據庫裏面有哪些數據表
show tables;
建立數據庫
1.瞭解數據的類型
2. 對於主鍵,惟一鍵,與外鍵 ,默認鍵,非空鍵進行了解
3. 對於數據庫的引擎進行了解 (myisam innodb)
4. 對於數據庫中數據表有增刪 改查的操做
5. 對於數據庫的集合函數進行操做
6. 瞭解sql語言間的簡單的流程控制
6.對於數據庫中的視圖進行了解
Char與varchar的區別:
CHAR(M)定義的列的長度爲固定的,M取值能夠爲0~255之間,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程當中不進行大小寫轉換。
刪除外鍵
alter table AdItem drop constraint c
添加外鍵
alter table AdItem
add constraint c foreign key (AI_nOrderNo) references AdOrder(AO_nOrderNo)
添加主鍵
alter table tt add constraint kk primary key()
刪除主鍵
alter table tt drop primary key;
------------------------------------------------------------------------------------------------------
SQL正則
delete form tt where sname regexp "";
SHOW TABLES;
SHOW FULL COLUMNS FROM tt;
INSERT INTO tt(tname) VALUES('張三'),('李四'),('王五');
INSERT INTO tt(tname) VALUES('張三丰'),('李四'),('王五');
INSERT INTO tt(tname) VALUES('宗斌'),('李桐'),('王五');
INSERT INTO tt(tname) VALUES('陸瑞'),('楊敏'),('王五');
INSERT INTO tt(tname) VALUES("黃愷"),('李四'),('王五');
INSERT INTO tt(tname) VALUES('馬維奇'),('李四同'),('王五');
SELECT * FROM tt;
SELECT * FROM tt WHERE tname REGEXP "李四";
SELECT * FROM tt WHERE tname REGEXP "李|楊|宗";
show tables;
drop table one,tt;
-- 建立一個數據表
create table one(
id int not null auto_increment primary key,
sname varchar(30) not null default "監控中心");
alter table one add index kk(sname);
-- 刪除索引的兩種方法
alter table one drop index kk;
drop index kk on one;
添加主鍵
alter table one add constraint kk foreign key(laoshi) reference one(id)
刪除外鍵:
alter table one drop foreign key kk;
-- 刪除索引
alter table t drop index kk;
-- 添加索引
alter table t add index kk(sname,sscore);
-- 刪除索引
drop index kk on t;
alter table t add index kk(sname,sscore);
-- 刪除惟一索引
-- 查看全部的索引
show index from bb;
或者是加複數的形式
show indexed from bb;
-- 添加惟一索引
alter table tt add constraint kk unique key(id)
-- 刪除惟一索引
按分組來查詢
select pro 專業,count(sname) 人數 from t group by pro having count(*) >2;
-----------------------------------------------
show tables;
-- 刪除表
drop table one;
-- 建立表
create table if not exists student (
sid tinyint unsigned not null auto_increment primary key,
sname varchar(30) ,
sscore tinyint ,
index kk(sname,sscore),
pro char(30));
-- 刪除索引
alter table t drop index kk;
-- 添加索引
alter table t add index kk(sname,sscore);
-- 刪除索引
drop index kk on t;
alter table student rename t;
desc t;
insert into t values(null,"張三",40,"計算機");
insert into t values(null,"李四",59,"會計");
insert into t values(null,"王志雷",40,"計算機");
insert into t values(null,"殷超",40,"美術");
insert into t values(null,"宗斌",65,"java");
insert into t values(null,"張總",null,"武術")
insert into t (sname,sscore,pro) select sname ,sscore ,pro from t;
select * from t;
select distinct pro from t;
select * from t where sscore >40;
select count(*) from t;
select pro 專業,avg(sscore)平均分 from t group by pro having avg(sscore)>40 ;
select * from t;
select * from t where sname="張三";
select pro 專業,count(sname) 人數 from t group by pro having count(*) >2;
select count(*) from t where pro="計算機";
select * from t;
-- 查詢內容
select sname 姓名 ,avg(sscore) from t group by sname;
-- 查分姐中每一個專業的成績的總合
select pro 專業,sum(sscore) from t group by pro having sum(sscore) <100;
-- 查看不一樣專業的有幾我的
select pro ,count(*) from t group by pro having count(*)>4;
-- 查詢相關專業的平均分數(而且將專業成總合等於200的給找出來)
select pro 專業, avg(sscore) from t group by pro having sum(sscore)<200;
select * from t where sscore = (select max(sscore) from t);
show tables;
drop table t;
-- 創建老師表
create table t(
id int not null auto_increment ,
sname varchar(30),
primary key(id));
-- 向老師表插入相應的數據
insert into t values(null,"王老師");
insert into t values(null,"張老師");
insert into t values(null,"殷老師");
-- 查看老師表
select * from t;
-- 創建學生表
create table s(
id int not null auto_increment,
sname varchar(40),
laoshi int,
primary key(id));
-- 向學生表中插入數據
insert into s values(null,"殷超",3);
insert into s values(null,"陸瑞",2);
insert into s values(null,"宗斌",1);
-- 查看學生數據
select * from s;
-- 跨表進行查詢
select * from t,s where t.id=s.laoshi;
-- 跨表查詢
select s.sname 姓名,t.sname from t,s where t.id=s.laoshi;
-- 另外兩種的查詢的方法
select t.sname 老師, s.sname 學生 from t left join s on t.id=s.laoshi;
select s.sname 學生, t.sname 老師學生 from s right join t on t.id=s.laoshi;
-- 另外的查詢的方式
select * from t left join s on s.laoshi=t.`id`;
select * from t right join s on t.id=s.`laoshi`;
select t.sname,s.`sname` from t join s on s.`laoshi`=t.`id`;
-- 左插與右插是同樣的,
經常使用的函數
length() 查看字節數
-- UTF8的一個字是三個字節
select sname ,length(sname) from t;
-- GBK的一個字是兩個字節
create table t1(
sname char(10))engine=myisam default charset=gbk;
insert into t1 values('中國');
select * from t1;
select sname ,length(sname) from t1;
-- 全球惟一算法
select uuid();
select uuid_short();
-- 從數據表中隨機出一個數
select * from t order by rand() limit 1;
時間函數
-- 當前的系統的日期
select curdate();
-- 查看當前的時間
select curtime();
-- 查看當前的日期+時間
select now();
-- 經常使用來取一個取間 ,如一週內註冊的個數
select count(*) from login where logtime between "2016-6-24" and curdate();
查看一週內註冊會員的數據
select count(*) from tt where regtime between date_add(curdate(),interval -7 day) and curdate();
select count(*) from tt where regtime between date_add(curdate(),interval -1 month) and curdate();
-- 求兩個時間的差值,一般用來求,一個會員已經註冊了多久等時間差值datediff(大時間,小時間 );
select datediff(curdate(),"1990-01-29");
-- 求兩個時間的差值,一般用來求,一個會員已經註冊了多久等時間差值datediff(大時間,小時間 );
select datediff(curdate(),"1990-01-29");
-- 求兩個時間的差值,一般用來求,一個會員已經註冊了多久等時間差值datediff(大時間,小時間 );
select datediff(curdate(),"1990-01-29");
-- 求兩個時間差 表明當前的時間減去兩天的數字 就是前兩天的時間,若是-2的話則是兩天後了(這個與date_add()相反
select date_sub(curdate(),interval 2 day);
-- 加密函數 (都是單向加密,不能解密)
select md5('aa'),sha('aa'),sha1('aa'),password('aa');
-- 查看字符個數
select char_length(md5('aa')),char_length(sha('aa')),char_length(sha1('aa')),char_length(password('aa'));
-- char_length(md5('aa')) char_length(sha('aa')) char_length(sha1('aa')) char_length(password('aa'))
-- 32 40 40 41
-- 全球惟一隨機生成的ID號
select uuid();
-- 36位密文長度36
select char_length(uuid());
-- 數字的格式化
select format(10.445,2);
-- 將 IP地址轉換成數字(裏面的IP要加引號引發來)
select inet_ntoa('3232238089');
-- 將地址轉換爲ip
select inet_aton('192.168.10.9');
-- 流程判斷 case when then end
select sname 姓名 ,english 英語成績,case when english >90 then "優秀"
when english >= 80 then "良好"
when english <60 then "不及格"
end 等級 from t;
-- 流程判斷2 (最後一個else必定要加)(就是補考的位置)
select sname 姓名, english 英語成績,
if(english>90,"優秀",if(english<60,"不及格","補考")) 等級 from t;
-- 時間格式化
select date_format('19900129',"%Y年%m月%d舊");
select date_format('19900129',"%H");
下面是時間的格式化參數
Specifier Description
%a Abbreviated weekday name (Sun..Sat)
%b Abbreviated month name (Jan..Dec)
%c Month, numeric (0..12)
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)
%f Microseconds (000000..999999)
%H Hour (00..23)
%h Hour (01..12)
%I Hour (01..12)
%i Minutes, numeric (00..59)
%j Day of year (001..366)
%k Hour (0..23)
%l Hour (1..12)
%M Month name (January..December)
%m Month, numeric (00..12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss followed by AM or PM)
%S Seconds (00..59)
%s Seconds (00..59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00..53), where Sunday is the first day of the week; WEEK() mode 0
%u Week (00..53), where Monday is the first day of the week; WEEK() mode 1
%V Week (01..53), where Sunday is the first day of the week; WEEK() mode 2;
used with %X
%v Week (01..53), where Monday is the first day of the week; WEEK() mode 3;
used with %x
%W Weekday name (Sunday..Saturday)
%w Day of the week (0=Sunday..6=Saturday)
mysql認識:
---------------------------------------
本節課的學習的目標
1.對於mysql進行簡單的認識
2.對於數據庫的增刪 改 查 進行操做
3.數據的類型
4.對於數據查詢的條件進行了解
5.對於集合函數有必定的認識
惟一標識就是主鍵 (一個是惟一性 也就是說主鍵是不能重複的,且主鍵是不能爲空
查詢一個集合中的數據
select * from tt where id in(4,6);
一樣的結果咱們還有另外的一種查詢方法
select * from tt where id=4 or id=6;
查詢一個區間內的數據(這個數據是連續性的,中間也是能夠出現斷層現象)
select * from tt where id between 4 and 6;
= > >= < <= <> != and or like in betwen regexp
like用法
select * from tt where sname like "志%";
監控中心線上管理平臺 實現一個模糊的查詢效果的話就是封裝sql進行模糊查詢
正則表達式(正則表達式必定要與通配符區分開來)
1.通配符中的「*」表明的任意的一個或者是多個字符
2.在正則表達式中表明的是個數(用來修飾前面的原子出現的0個或者是多個)
select * from tt where sname regexp "[^志]";
"=" 在通常的語言當中「=」是賦值的符號 「==」是比較的符號
而在sql語言中「=」是比較的符號
數據的插入
主要有三種的數據插入方式
第一種insert [into] table_name (sname ,pro) values("","");
第二種 insert into table_name values(null,"","","",);
insert into tt values(null,"老馬","java");
第三種的插入方式
insert into table_name select * from tt;
(這樣操做是不對的,由於全部的數據當中就有主鍵 就不能重複)
insert into table_name (sname ) select sname from tt.;
constraint(約束)
PK 主鍵
UK 惟一鍵
FK 外鍵
key(index)
時間的數據類型
datetime 日期+時間 (日期要以 2001-4-4 3:4:5
date 日期
time
timestamp 它是一人時間戳 會隨時的更新,只要你操做就會更新
1.查看有哪些的數據庫
show databases;
2.使用哪一個數據庫
use work
3. 查看哪一個數據庫裏面有哪些數據表
show tables;
建立數據庫
1.瞭解數據的類型
2. 對於主鍵,惟一鍵,與外鍵 ,默認鍵,非空鍵進行了解
3. 對於數據庫的引擎進行了解 (myisam innodb)
4. 對於數據庫中數據表有增刪 改查的操做
5. 對於數據庫的集合函數進行操做
6. 瞭解sql語言間的簡單的流程控制
6.對於數據庫中的視圖進行了解
Char與varchar的區別:
CHAR(M)定義的列的長度爲固定的,M取值能夠爲0~255之間,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程當中不進行大小寫轉換。
刪除外鍵
添加外鍵
alter table AdItem
add constraint c foreign key (AI_nOrderNo) references AdOrder(AO_nOrderNo)
添加主鍵
alter table tt add constraint kk primary key()
刪除主鍵
alter table tt drop primary key;
------------------------------------------------------------------------------------------------------
SQL正則
delete form tt where sname regexp "";
SHOW TABLES;
SHOW FULL COLUMNS FROM tt;
INSERT INTO tt(tname) VALUES('張三'),('李四'),('王五');
INSERT INTO tt(tname) VALUES('張三丰'),('李四'),('王五');
INSERT INTO tt(tname) VALUES('宗斌'),('李桐'),('王五');
INSERT INTO tt(tname) VALUES('陸瑞'),('楊敏'),('王五');
INSERT INTO tt(tname) VALUES("黃愷"),('李四'),('王五');
INSERT INTO tt(tname) VALUES('馬維奇'),('李四同'),('王五');
SELECT * FROM tt;
SELECT * FROM tt WHERE tname REGEXP "李四";
SELECT * FROM tt WHERE tname REGEXP "李|楊|宗";
show tables;
drop table one,tt;
-- 建立一個數據表
create table one(
id int not null auto_increment primary key,
sname varchar(30) not null default "監控中心");
alter table one add index kk(sname);
-- 刪除索引的兩種方法
alter table one drop index kk;
drop index kk on one;
添加外鍵
alter table one add constraint kk foreign key(laoshi) reference one(id)
刪除外鍵:
alter table one drop foreign key kk;
-- 刪除索引
alter table t drop index kk;
-- 添加索引
alter table t add index kk(sname,sscore);
-- 刪除索引
drop index kk on t;
按分組來查詢
select pro 專業,count(sname) 人數 from t group by pro having count(*) >2;
-----------------------------------------------
show tables;
-- 刪除表
drop table one;
-- 建立表
create table if not exists student (
sid tinyint unsigned not null auto_increment primary key,
sname varchar(30) ,
sscore tinyint ,
index kk(sname,sscore),
pro char(30));
-- 刪除索引
alter table t drop index kk;
-- 添加索引
alter table t add index kk(sname,sscore);
-- 刪除索引
drop index kk on t;
alter table student rename t;
desc t;
insert into t values(null,"張三",40,"計算機");
insert into t values(null,"李四",59,"會計");
insert into t values(null,"王志雷",40,"計算機");
insert into t values(null,"殷超",40,"美術");
insert into t values(null,"宗斌",65,"java");
insert into t values(null,"張總",null,"武術")
insert into t (sname,sscore,pro) select sname ,sscore ,pro from t;
select * from t;
select distinct pro from t;
select * from t where sscore >40;
select count(*) from t;
select pro 專業,avg(sscore)平均分 from t group by pro having avg(sscore)>40 ;
select * from t;
select * from t where sname="張三";
select pro 專業,count(sname) 人數 from t group by pro having count(*) >2;
select count(*) from t where pro="計算機";
select * from t;
-- 查詢內容
select sname 姓名 ,avg(sscore) from t group by sname;
-- 查分姐中每一個專業的成績的總合
select pro 專業,sum(sscore) from t group by pro having sum(sscore) <100;
-- 查看不一樣專業的有幾我的
select pro ,count(*) from t group by pro having count(*)>4;
-- 查詢相關專業的平均分數(而且將專業成總合等於200的給找出來)
select pro 專業, avg(sscore) from t group by pro having sum(sscore)<200;
select * from t where sscore = (select max(sscore) from t);
show tables;
drop table t;
-- 創建老師表
create table t(
id int not null auto_increment ,
sname varchar(30),
primary key(id));
-- 向老師表插入相應的數據
insert into t values(null,"王老師");
insert into t values(null,"張老師");
insert into t values(null,"殷老師");
-- 查看老師表
select * from t;
-- 創建學生表
create table s(
id int not null auto_increment,
sname varchar(40),
laoshi int,
primary key(id));
-- 向學生表中插入數據
insert into s values(null,"殷超",3);
insert into s values(null,"陸瑞",2);
insert into s values(null,"宗斌",1);
-- 查看學生數據
select * from s;
-- 跨表進行查詢
select * from t,s where t.id=s.laoshi;
-- 跨表查詢
select s.sname 姓名,t.sname from t,s where t.id=s.laoshi;
-- 另外兩種的查詢的方法
select t.sname 老師, s.sname 學生 from t left join s on t.id=s.laoshi;
select s.sname 學生, t.sname 老師學生 from s right join t on t.id=s.laoshi;
-- 另外的查詢的方式
select * from t left join s on s.laoshi=t.`id`;
select * from t right join s on t.id=s.`laoshi`;
select t.sname,s.`sname` from t join s on s.`laoshi`=t.`id`;
-- 左插與右插是同樣的,
經常使用的函數
length() 查看字節數
-- UTF8的一個字是三個字節
select sname ,length(sname) from t;
-- GBK的一個字是兩個字節
create table t1(
sname char(10))engine=myisam default charset=gbk;
insert into t1 values('中國');
select * from t1;
select sname ,length(sname) from t1;
-- 全球惟一算法
select uuid();
select uuid_short();
-- 從數據表中隨機出一個數
select * from t order by rand() limit 1;
時間函數
-- 當前的系統的日期
select curdate();
-- 查看當前的時間
select curtime();
-- 查看當前的日期+時間
select now();
-- 經常使用來取一個取間 ,如一週內註冊的個數
select count(*) from login where logtime between "2016-6-24" and curdate();、
、
抓包命令
tcpdump -i eth0 -nnX port 21
insert into t3 values(null,"1990-01-29 23:00:00","柏浩")
-- 查看當前的mysql版本所支持的引擎名
show engines;
-- 第一個參數,只能存話表達式,並不能存其它的值
select if(4<0,"c","d");\
select inet_aton('192.168.254.13'); -- 結果是 3232300557
-- 若是ping 3232300557 也是能夠ping通
-- SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19'); 將日期+時間變成時間戳
select unix_timestamp('2016-06-26 23:49:20');
-- 從時間戳變成日期
select from_unixtime(1466956160);
-- 將時間進行格式化
select date_format(now(),"%Y年%m月%d日 %T");
-- 將字轉成你們
select upper('hello');
-- 將字轉成小定
select lower('HELLO');
-- 截取左面的字符數
select left('王志雷',2);
-- 截取右面的字符數
select right('監控中心',3);
-- 截取中間的字數符(從第二個字符開始截取,(下標第一個爲1) 取多個少)
select mid('abcd',2,3);
-- 取餘
select mod(5,3);
show tables;
drop table t,t3;
create table t(
id int not null auto_increment primary key,
tname varchar(30) not null default "aa",
tgener enum('男','女',"保密")
)engine=innodb default character set =utf8;
insert into t (tname) values(left('abc',2));
select * from t;
alter table t change tgener tgender enum('男','女');
select * from t order by rand() limit 1;
-- 字符鏈接
select concat('王',"五");
-- 以一個字符串來鏈接
select concat_ws("_","志","雷");
-- 對於內空進行調整、 若是則顯示後面的內容,只有等於null的狀況下 纔會執行第二個參數的內容,若是不是空的話 則輸出第一個參數
select ifnull(null,"未");
select tname 姓名,ifnull(tgender,"未知") 性別 from t;
-- 若是A條件成立,則執行第二個參數,不然不成立的話 則執行第三個 「第一個內容爲字符串的話 則系統會默認的認爲是假
select if("志雷","b","c");
-- 至關於if(第一個參數) 真的話 執行第二個參數 假的話 執行第三個參數 正常的狀況下都是放的是表達式
-- 建立視圖
create view test as
select * from t;
-- 視頻至關於函數同樣,可是函數是用select直接來調用 ,而視圖至關於一個表,
-- 咱們要用select * from 視圖名長來顯示裏面的數據
select * from test;
刪除視圖
-- drop view test
-- 新建觸發器
show tables;
create table t1(
id int not null auto_increment,
tname varchar(20),
sscore tinyint unsigned,
primary key(id))engine=innodb default charset=utf8
create table t2 like t1;
show tables;
desc t1;
desc t2;
insert into t1 values(null,'小明',30);
insert into t1 values(null,'小黃',60);
insert into t1 values(null,'小殷',56);
insert into t1 values(null,'小馬',37);
insert into t1 values(null,'小宗',67);
insert into t1 values(null,'小錢',99);
select * from t1;
select * from t2;
delimiter //create trigger charu after insert on t1 for each rowbegin if new.sscore <60 then insert into t2 select * from t1 where new.id = t1.`id`; end if;end//delimiter ;