Mysql   for windows (MySQL開發)

數據庫的安裝啓動系列:

1,將Mysql啓動路徑配置在windows環境變量裏,在環境變量path裏的頭行輸入mysql的bin路徑,C:\program files\mysql\bin;

2,mysql的啓動:net start mysql 

mysql  -uroot   -p123   -h127.0.0.1

其中-u後面表示用戶名,-p後面表示用戶名密碼,-h表示要登錄數據庫的ip地址。

3,mysqladmin -uroot  -p[password]     修改密碼,

     |--但是對於初始數據庫的修改密碼,可用下列方式,(因爲初始密碼爲空)

mysqladmin -u root password [你要修改的密碼]

4、mysql   -uroot  -p[password]  -------直接登錄

5、mysql   -uroot -p[password] -h[IP]   登錄別人的數據庫

6、alter table [表]  add constraint  [約束名稱]  check ([約束條件])

                              add  constraint [約束名稱]   foreign key  [主鍵名]  references [表].[主鍵名]

創建數據庫時的注意項

     1、create datebase [t]  character set  utf8 collate utf8_general_ci;  --表示在創建數據庫的時候設置數據庫字符編碼以及字符集爲utf8和他、ut8_genearal_ci.中文編碼集。(若不設置,其默認設置爲lan_ti字符,在後面插入中文字符數據的顯示的時候會顯示亂碼)所以要注意了。

     2、那麼不小心在創建數據庫的時候沒有設置字符編碼爲utf8怎麼辦呢,這個時候我們就可以在創建後對數據庫的字符編碼進行修改。

alter database [db]   character set utf8  collate utf8_general_ci;

alter  datebase [db]  character set GBK  collate utf8_general_ci;

但是注意以前的數據任然爲亂碼,設置之後的數據爲正常字符。

3、創建表時設置字段編碼

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;

4、修改表編碼

 alter table  [dbt] character set utf8  collate utf8_general_ci;

5、查看所有字符編碼

 show  character set;

6、查看數據庫編碼

show  variables like '%char%';  -- 查看數據庫編碼

set character_set_server = "utf8"  --設置數據庫編碼

7、查看某字段使用的編碼

 select charset(id)  from [dbt];

mysql的備份以及還原:

     1、例如有個java數據庫,

     mysqldump -u[用戶名]  -p[password]  java  >  F:\java.bak

還原:

     mysql -u[用戶名]  -p[password]  java  <  F:\java.bak

配置文件的處理:(my.ini或者my-default.ini配置文件)

  1. 若配置文件沒有[client],自己手動添加。並在下方添加default-character-set=utf8

  2. 若配置沒有[mysql] 手動添加,並在下方添加default-character-set=utf8

  3. 在[mysqld]項裏添加character-set-server=utf8

  4. 該配置可以處理數據顯示亂碼問題。

常用函數類:

1、now()表示返回現在時間值,時間格式爲日期: 例如:2017-5-5 12:50:20,此情景也可以用在創建表的時候,

create table emp1 (ordertime   datetime   default NOW() );

2、abs(x),表示返回x的絕對值。例如:

select abs(deptno)  from [dbt];

3、PERIOD_ADD(datetime1,datetime2),表示返回兩個時間的差值

select PERIOD_ADD(20030201,20170205);

返回值爲:188115206

4、curdate()或current_date()返回目前日期:

select curdate() as  現在日期;

select CURRENT_DATE() as 現在日期;

5、關於MySQL的top用法,MySQL無select top n from table  用法

所以可以用limitv  n 代替

select * from table limit  10;  //表示查看前10行

或者

select  * form table  limit  n,m;  //查看指定行之間

6、更改表名稱

alter table   [表名]  rename   to  [新表名];

7、修改默認存儲引擎

在my.ini文件里加入或者修改一下一句話

default-storage-engine=[存儲引擎名稱]

其中有九種引擎名稱可以選擇,但要看你的MySQL是否支持這些引擎了。

8、三種常用的存儲引擎

     1)、MyISAM存儲引擎:由於該存儲引擎不支持事物、外鍵所以訪問速度比較快,所以對事物完整性要求不高可以選用此存儲引擎。

     2)、InnoDB存儲引擎:在事務上具有優勢,支持具有提交、回滾和崩潰恢復能力,所以會比MyISAM存儲引擎會佔用更多的磁盤空間

     3)、MEMORY存儲引擎:是使用內存來存儲數據,所以訪問數據的速度非常快,但安全上沒有保障。


二、表操作、

9、查看錶結構

   DESC [表名稱];

10、在表裏增加字段

   alter table [表名稱]  add 【屬性名】  【屬性類型】;

11、對進行重新命名

   alter table [表]  rename [新命名] ;

12、在某一字段後添加字段

   alter table [表]  add  [屬性名]  [屬性類型]  after  [屬性名] ;

13、 插入數據

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表中。

14、 刪除

正常刪除數據(單表)

    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

要求:

1、全爲0的子串不替換

2、把由開始的子串第一個“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|-)[^-]+'1LEVELAS 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開頭的子串,第48行不符合這個標準

第二組:0{0,} 0或多個0,這一組可爲空值,如第3行。

第三組:[^0-]{1,} 中間至少有一個非且非分割符的字符,這一組限制了子串不能都是0。第1567都不符合這個標準

第四組:[^-]{0,}  串中不能有分隔符,這一組可爲空值,如210

通過上圖可以看到能匹配的只有23910四行。

 

按上面分爲四個組的方式,正則表達式也可以寫爲

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|-)[^-]+'1LEVELAS 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章