数据库的安装启动系列:

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