數據庫的安裝啓動系列:java
1,將Mysql啓動路徑配置在windows環境變量裏,在環境變量path裏的頭行輸入mysql的bin路徑,C:\program files\mysql\bin;mysql
2,mysql的啓動:net start mysql web
mysql -uroot -p123 -h127.0.0.1正則表達式
其中-u後面表示用戶名,-p後面表示用戶名密碼,-h表示要登陸數據庫的ip地址。sql
3,mysqladmin -uroot -p[password] 修改密碼,數據庫
|--可是對於初始數據庫的修改密碼,可用下列方式,(由於初始密碼爲空)windows
mysqladmin -u root password [你要修改的密碼]安全
四、mysql -uroot -p[password] -------直接登陸ide
五、mysql -uroot -p[password] -h[IP] 登陸別人的數據庫函數
六、alter table [表] add constraint [約束名稱] check ([約束條件])
add constraint [約束名稱] foreign key [主鍵名] references [表].[主鍵名]
建立數據庫時的注意項:
一、create datebase [t] character set utf8 collate utf8_general_ci; --表示在建立數據庫的時候設置數據庫字符編碼以及字符集爲utf8和他、ut8_genearal_ci.中文編碼集。(若不設置,其默認設置爲lan_ti字符,在後面插入中文字符數據的顯示的時候會顯示亂碼)因此要注意了。
二、那麼不當心在建立數據庫的時候沒有設置字符編碼爲utf8怎麼辦呢,這個時候咱們就能夠在建立後對數據庫的字符編碼進行修改。
alter database [db] character set utf8 collate utf8_general_ci;
alter datebase [db] character set GBK collate utf8_general_ci;
可是注意之前的數據任然爲亂碼,設置以後的數據爲正常字符。
三、建立表時設置字段編碼
use [db];
drop table [dbt] if exists [dbt] ;
create table [dbt] (
id int(10) auto_increment,
user_name varchar(60) character set utf8 collate utf8_general_ci,
email varchar(60) primary key(id)
) character set utf8 collate utf8_general_ci;
四、修改表編碼
alter table [dbt] character set utf8 collate utf8_general_ci;
五、查看全部字符編碼
show character set;
六、查看數據庫編碼
show variables like '%char%'; -- 查看數據庫編碼
set character_set_server = "utf8" --設置數據庫編碼
七、查看某字段使用的編碼
select charset(id) from [dbt];
mysql的備份以及還原:
一、例若有個java數據庫,
mysqldump -u[用戶名] -p[password] java > F:\java.bak
還原:
mysql -u[用戶名] -p[password] java < F:\java.bak
配置文件的處理:(my.ini或者my-default.ini配置文件)
若配置文件沒有[client],本身手動添加。並在下方添加default-character-set=utf8
若配置沒有[mysql] 手動添加,並在下方添加default-character-set=utf8
在[mysqld]項裏添加character-set-server=utf8
該配置能夠處理數據顯示亂碼問題。
經常使用函數類:
一、now()表示返回如今時間值,時間格式爲日期: 例如:2017-5-5 12:50:20,此情景也能夠用在建立表的時候,
create table emp1 (ordertime datetime default NOW() );
二、abs(x),表示返回x的絕對值。例如:
select abs(deptno) from [dbt];
三、PERIOD_ADD(datetime1,datetime2),表示返回兩個時間的差值
select PERIOD_ADD(20030201,20170205);
返回值爲:188115206
四、curdate()或current_date()返回目前日期:
select curdate() as 如今日期;
select CURRENT_DATE() as 如今日期;
五、關於MySQL的top用法,MySQL無select top n from table 用法
因此能夠用limitv n 代替
select * from table limit 10; //表示查看前10行
或者
select * form table limit n,m; //查看指定行之間
六、更改表名稱
alter table [表名] rename to [新表名];
七、修改默認存儲引擎
在my.ini文件里加入或者修改一下一句話
default-storage-engine=[存儲引擎名稱]
其中有九種引擎名稱能夠選擇,但要看你的MySQL是否支持這些引擎了。
八、三種經常使用的存儲引擎
1)、MyISAM存儲引擎:因爲該存儲引擎不支持事物、外鍵因此訪問速度比較快,因此對事物完整性要求不高能夠選用此存儲引擎。
2)、InnoDB存儲引擎:在事務上具備優點,支持具備提交、回滾和崩潰恢復能力,因此會比MyISAM存儲引擎會佔用更多的磁盤空間
3)、MEMORY存儲引擎:是使用內存來存儲數據,因此訪問數據的速度很是快,但安全上沒有保障。
2、表操做、
九、查看錶結構
DESC [表名稱];
十、在表裏增長字段
alter table [表名稱] add 【屬性名】 【屬性類型】;
十一、對進行從新命名
alter table [表] rename [新命名] ;
十二、在某一字段後添加字段
alter table [表] add [屬性名] [屬性類型] after [屬性名] ;
1三、 插入數據
1. 正常插入數據
insert into table_test value("value1","value2","value3");
2. 其餘方式插入數據(表之間的插入數據)
insert into table_test(test1,test2,test3) SELECT test1,test2,test3 FROM table_test1;
把table_test1表的test1,test2,test3字段的值查出來並插入到table_test表中。
1四、 刪除
正常刪除數據(單表)
delete from table where ...
連表刪除數據
delete A.*,B.* from A join B on A.test1 = B.test1;
當表之間有外鍵鏈接的時候可能會刪除數據失敗
好比:table_test(test1 int primary key,test2 int, test3 int)
table_test1(test4 int primary key,test5 int)
兩張表用test1與test4進行鏈接
若刪除兩張表內test4字段爲7的數據:
DELETE table_test,table_test1
FROM table_test LEFT JOIN table_test1 ON table_test.`test1` = table_test1.`test4`
WHERE table_test1.`test4` = 7;
執行上述語句會有報錯。由於有外鍵約束。
因此要先取消外鍵約束問題,而後在刪除數據後,在將外鍵恢復便可
set foreign_key_checks = 0;來將全部的外鍵取消
DELETE table_test,table_test1
FROM table_test LEFT JOIN table_test1 ON table_test.`test1` = table_test1.`test4`
WHERE table_test1.`test4` = 7;
set foreign_key_checks = 1;來將外鍵恢復
CAST函數的使用:
CAST函數語法規則是:Cast(字段名 as 轉換的類型 ),其中類型能夠爲:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和時間型
DECIMAL float型
SIGNED int
TIME 時間型
實例1:
表table1
date:2015-11-03 15:31:26
select cast(date as signed) as date from table1;
結果以下:
date:20151103153126
select cast(date as char) as date from table1;
結果以下:
date:2015-11-03 15:31:26
實例2:
select cast(date as datetime) as date from table1;
結果以下:
date:2015-11-03 15:31:26
實例3:
select cast(date as date) as date from table1;
結果以下:
date:2015-11-03
實例4:
select cast(date as time) as date from table1;
結果以下:
date:15:31:26
這裏date對應日期,time對應時間
實例5:
表table2
num:20
select cast(num as decimal(10, 2)) as num from table2
結果以下:
num:20.00
REGEXP_REPLACE函數的使用:
現有字符串以下「000000-00000h-010000-C0000b-000000-000000-000000-d0000d-0002e0-00003a」
要求:
一、全爲0的子串不替換
二、把由0 開始的子串第一個「0」替換爲「A」
替換後結果以下
「000000-A0000h-A10000-C0000b-000000-000000-000000-d0000d-A002e0-A0003a」
先看語句,而後解釋
WITH tab AS
(SELECT '000000-00000h-010000-C0000b-000000-000000-000000-d0000d-0002e0-00003a' col FROM dual
UNION ALL
SELECT '00000h-010000-C0000b-000000-000000-000000-d0000d-0002e0-00003a' col FROM dual)
SELECT ltrim(regexp_replace(col, '(^0|-0)(0{0,}[^0-]{1,}[^-]{0,})', '-A\2'), '-') AS col
FROM tab;
COL
--------------------------------------------------------------------------------
000000-A0000h-A10000-C0000b-000000-000000-000000-d0000d-A002e0-A0003a
A0000h-A10000-C0000b-000000-000000-000000-d0000d-A002e0-A0003a
爲了便於理解。咱們來分拆下。首先分把各子串均轉爲一行顯示,而後把各正則分組分列顯示。
WITH tab0 AS
(SELECT '000000-00000h-010000-C0000b-000000-000000-000000-d0000d-0002e0-00003a' col
FROM dual),
tab AS
(SELECT regexp_substr(col, '(^0|-)[^-]+', 1, LEVEL) AS col
FROM tab0
CONNECT BY LEVEL <= regexp_count(col, '-') + 1)
SELECT col,
ltrim(regexp_replace(col, '(^0|-0)(0{0,}[^0-]{1,}[^-]{0,})', '-A\2'), '-') AS col0,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\1') AS col1,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\2') AS col2,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\3') AS col3,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\4') AS col4
FROM tab;
結果以下
COL |
COL0 |
COL1 |
COL2 |
COL3 |
COL4 |
000000 |
000000 |
000000 |
000000 |
000000 |
000000 |
-00000h |
A0000h |
-0 |
0000 |
h |
|
-010000 |
A10000 |
-0 |
1 |
0000 |
|
-C0000b |
C0000b |
-C0000b |
-C0000b |
-C0000b |
-C0000b |
-000000 |
000000 |
-000000 |
-000000 |
-000000 |
-000000 |
-000000 |
000000 |
-000000 |
-000000 |
-000000 |
-000000 |
-000000 |
000000 |
-000000 |
-000000 |
-000000 |
-000000 |
-d0000d |
d0000d |
-d0000d |
-d0000d |
-d0000d |
-d0000d |
-0002e0 |
A002e0 |
-0 |
00 |
2e |
0 |
-00003a |
A0003a |
-0 |
000 |
3a |
正則表達式分爲四組
第一組:(^0|-0) 開頭爲0或-0,這一組限制了只能匹配以0開頭的子串,第4、8行不符合這個標準
第二組:0{0,} 0或多個0,這一組可爲空值,如第3行。
第三組:[^0-]{1,} 中間至少有一個非0 且非分割符的字符,這一組限制了子串不能都是0。第1、5、6、7都不符合這個標準
第四組:[^-]{0,} 串中不能有分隔符,這一組可爲空值,如2、10行
經過上圖能夠看到能匹配的只有2、3、9、10四行。
按上面分爲四個組的方式,正則表達式也能夠寫爲
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '-A\2\3\4')
而「-A\2\3\4」若是用上面的結果來模擬就是「'-A' || col2 || col3 || col4」
WITH tab0 AS
(SELECT '000000-00000h-010000-C0000b-000000-000000-000000-d0000d-0002e0-00003a' col
FROM dual),
tab AS
(SELECT regexp_substr(col, '(^0|-)[^-]+', 1, LEVEL) AS col
FROM tab0
CONNECT BY LEVEL <= regexp_count(col, '-') + 1),
tab1 AS
(SELECT col,
ltrim(regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '-A\2\3\4'), '-') AS col0,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\1') AS col1,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\2') AS col2,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\3') AS col3,
regexp_replace(col, '(^0|-0)(0{0,})([^0-]{1,})([^-]{0,})', '\4') AS col4
FROM tab)
SELECT col, col0, ltrim('-A' || col2 || col3 || col4, '-') AS "-A\2\3\4"
FROM tab1
COL |
COL0 |
-A\2\3\4 |
000000 |
000000 |
A000000000000000000 |
-00000h |
A0000h |
A0000h |
-010000 |
A10000 |
A10000 |
-C0000b |
C0000b |
A-C0000b-C0000b-C0000b |
-000000 |
000000 |
A-000000-000000-000000 |
-000000 |
000000 |
A-000000-000000-000000 |
-000000 |
000000 |
A-000000-000000-000000 |
-d0000d |
d0000d |
A-d0000d-d0000d-d0000d |
-0002e0 |
A002e0 |
A002e0 |
-00003a |
A0003a |
A0003a |