数据库

数据库

1.数据库管理系统:是一个软件用来处理数据的

2.关系型数据库:mysql,orcale,db2,mariadb,sql server,存在硬存

方式:打开连接,切到一个文件下/找到一个文件/打开文件/读写记录/关闭文件(优化,加锁处理,权限认证),关闭连接

3.安装数据库:安装数据库管理系统;

创建数据库:创建一个文件夹

4.非关系数据库:数据都是以key=value的形式存放的,放在内存中,支持持久化;redis,mecache

5.数据库服务器:安装有数据库管理系统软件的一台机器

6.数据库中的一条记录相当于文件中的一行内容;数据库中的一个表相当于一个文件;数据库中的一个库相当于一个文件夹。

7.mysql基本使用

(1)登录数据库

    mysql -uroot -p123

(2)查看用户

    select user();

(3)退出

     quit       exit       \q

(4)查看帮助信息

    help create user;

(5)创建账号

  • create  user  '用户名'@'192.168.32.*(ip地址)'  identified by '密码';  #同一局域网之类的可以远程连接
  • create  user  '用户名'@'192.168.32.3(ip地址)'  identified by '密码'; #只有'192.168.32.3'可以远程连接
  • create  user  '用户名'@'%' identified by '密码';  #所有的电脑可远程连接

(6)授权

  • grant all privileges;
  • grant all on db1.t1 to 'egon'@'%';
  • grant all on *.* to 'egon'@'%';
  • flush privileges;    #刷新权限

(7)创建账号同时授权

grant all on *.* to 'alex'@'%' identified by '123';

flush privileges;

(8)远程连接mysql

mysql -uegon -p123 -h 192.168.11.55

(9)查看所有的数据库

show databases;

(10)查看数据库里的用户名与ip

select user,host from mysql.user;

8.数据库中的增删改查

(1)操作库(文件夹)

  • 增    create database db1 charset utf8;
  • 查    show databases;           show create database db1;
  • 改    alter database db1 charset gbk;
  • 删    drop databae db1;

(2)操作表(文件)

  • 切换到某一个库(文件夹)   use db1;       select database();   #查看当前所在的库
  • 增   creat table t1(id int,name char(10),age int)engine=innodb default charset utf8;   #最后一个字段不加逗号
  • 查   show tables;      show create table t1;      desc  t1;   #查看表结构
  • 改   alter table t1 charset gbk;   alter table t1 add sex char;   alter table t1 drop sex;                                   

            alter table t1 modify sex char(6);      alter table t1 change sex Sex char(6)

  • 删    drop table table66;

(3)操作记录

  • 增  

      insert into db1.t1(id,name,age,Sex) values

      (1,'egon1',18,'male'),

      (2,'egon2',28,'male');

 

      insert into db1.t1(id,name) values(5,'egon3');

  • 查       select name,id from db1.t1;   select * from db1.t1;
  • 改       updata db1.t1 set name='EGON';

      updata db1.t1 set name='alex' where id=5;

      updata db1.t1 set name='qqq' where Sex='male';

    delete from db1.t1;  #仅仅只有删除记录的效果,不能把表重置到初始状态

    truncate db1.t1;  #清空+重置

 

     delete from db1.t1 where id=3;

     delete from db1.t1  where name='dddd';

  • 自增id

    create table t1(id int not null unique auto_increment,name char(4);  #自增的字段必须是PRI

              insert into db1.t1(name) values

              ('egon1'),

    ('egon2');

9.把mysql做成系统服务

  • 查看系统服务,在运行里输入services.msc

    mysqld--install

    mysqld--remove

  • 在服务中可以直接鼠标操作mysql服务的启动与停止
  • 在cmd中操作

    net start mysql

    net stop mysql

10.存储引擎

(1)InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys

(2)查看支持的搜索引擎:show engines;

(3)创建表使用不同的引擎,文件保存格式不同(系统默认innodb);  

  create table t1(x int)engine=myisam;

  create table t2(x int)engine=blackhole;

  create table t3(x int)engine=memory;

  create table t4(x int)engine=innodb;

11.配置文件管理

在存放数据库mysql-5.6.38-winx64的目录下创建一个文件后缀为‘.ini’的文件,在该文件中存放一些配置信息。

例如:

[client]                                     #客户端配置信息(全局)
user='root'
password=''
default-character-set=utf8           #将客户端的编码配置为'utf-8'
[mysql]                                      #配置某一用户信息
user='alex'
password='123'
host=192.168.43.181
default-character-set=utf8            #将用户的数据编码配置为'utf-8'

[mysqld]                                       #配置服务端信息
;skip-grant-tables                     #可破解密码
character_set_server=utf8              #将服务端的编码配置为'utf-8'
default-storage-engine=innodb        #将服务端的存储引擎配置为'innodb'                        

 12.数据类型

(1)整数类型:tingyint   smallint   mediumint    int或integer   bigint

  • 作用:存储年龄、等级、id、各种号码等
  • 默认有符号
  • 整形宽度指的是显示宽度,并不是存储宽度
  • 一般用int就用其默认值就可以了
  • 以int为例
默认有符号,显示长度11位
create table t1(id int);
insert into t1 values(66666);
select * from t3;


改变为无符号,显示长度10位
create table t2(id int unsigned);
insert into t1 values(66666);
select * from t3;

(2)浮点类型:float、double、decimal

  • 作用:体重、薪资、价格等
  • float:精确到小数后7位
  • double:精确到小数后15位
  • decimal:精确到小数存储长度的最后一位
float:
mysql> create table t3(weight float(256,56) unsigned);
ERROR 1425 (42000): Too big scale 56 specified for column 'weight'. Maximum is 30.
mysql> create table t3(weight float(256,30) unsigned);
ERROR 1439 (42000): Display width out of range for column 'weight' (max = 255)
mysql> create table t3(weight float(255,30) unsigned);
Query OK, 0 rows affected (0.37 sec)




double:
mysql> create table t4(weight double(256,33) unsigned);
ERROR 1425 (42000): Too big scale 33 specified for column 'weight'. Maximum is 30
mysql> create table t4(weight double(256,30) unsigned);
ERROR 1439 (42000): Display width out of range for column 'weight' (max = 255)
mysql> create table t4(weight double(255,30) unsigned);
Query OK, 0 rows affected (0.36 sec)




decimal:
mysql> create table t5(weight decimal(66,33) unsigned);
ERROR 1425 (42000): Too big scale 33 specified for column 'weight'. Maximum is 30.
mysql> create table t5(weight decimal(66,30) unsigned);
ERROR 1426 (42000): Too big precision 66 specified for column 'weight'. Maximum is 65.
mysql> create table t5(weight decimal(65,30) unsigned);
Query OK, 0 rows affected (0.39 sec)
存储长度
float:
insert into t3 values(1.1111111111111111111111111111111111111111111111111111);

结果:

mysql> select * from t3;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
精确到小数后7位



doubleinsert into t4 values(1.1111111111111111111111111111111111111111111111111111);

结果:

mysql> select * from t4;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
精确到小数后15位




decimal:
insert into t5 values(1.1111111111111111111111111111111111111111111111111111);

结果:

mysql> select * from t5;
+----------------------------------+
| weight                           |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
精确到小数存储长度的最后一位
对比精度

(3)bit类型

mysql> create table t6(x bit(1));

mysql> insert into t6 values(2);

取值
mysql> select bin(x) from t6;
mysql> select hex(x) from t6;

结果
+--------+
| bin(x) |
+--------+
| 1      |
+--------+
row in set (0.02 sec)


+--------+
| hex(x) |
+--------+
| 1      |
+--------+
row in set (0.00 sec)
bit类型

(4)日期类型

  • DATE:2017-11-11 出生年月日
  • TIME:10:14:11 上课时间
  • DATETIME:2017-11-11 10:14:11 注册时间,文章发布时间,员工入职时间
  • TIMESTAMP:2017-11-11 10:14:11
  • YEAR :1970 出生年
create table t7(
    born_date date,
    class_time time,
    reg_time datetime,
    born_year year
);

insert into t7 values
('1999-11-11','08:30:00','2017-11-11 11:11:11',2011);

insert into t7 values
(now(),now(),now(),now());
日期
  • datetime与timestamp的区别

      1)datetime默认值为null,timestamp将当前时间作为默认值,在传空时使用默认值;

      2)datetime的日期范围是1001——9999年,timestamp的时间范围是1970——2038年;

         3)datetime使用8字节的存储空间,timestamp的存储空间为4字节,因此,timestamp比datetime的空间利用率

              更高

(5)字符串类型(编码为utf-8)

  • char

    1)范围:0-255

    2)特点:定长,简单粗暴,浪费空间(待存储的数据长度<宽度限制),存取速度快

  • varchar

    1)范围:0-21844

    2)特点:变长,精准,节省空间(待存储的数据长度<宽度限制),存取速度慢

 (6)枚举与集合类型

  •  枚举
create table t8(
    id int,
    name char(10),
    sex enum('male','female','None')      #在其中选一个
);
alter table t8 modify sex enum('male','female','None') not null default 'male';
insert into t8 values(1,'egon','xxxxx');
insert into t8(id,name) values(1,'egon');
枚举
  • 集合
create table t9(
    id int,
    name char(10),
    hobbies set('music','read','basketball','football','eat','sleep')  #在其中可多选
);
insert into t9 values(1,'egon','music,read,eat');
集合

13.约束

http://www.cnblogs.com/meng0410/articles/7725140.html

14.修改表

语法:
1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                        ADD 字段名  数据类型 [完整性约束条件…];
    ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名
                            ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
                            
3. 删除字段
      ALTER TABLE 表名 
                                    DROP 字段名;

4. 修改字段
      ALTER TABLE 表名 
                          MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

示例:
1. 修改存储引擎
mysql> alter table service engine=innodb;
Query OK, 0 rows affected (1.72 sec)
Records: 0  Duplicates: 0  Warnings: 0

2. 添加字段
mysql>  alter table service
        ->  add message varchar(20) not null,
        -> add age int(3) not null default 22;
Query OK, 0 rows affected (2.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
    
mysql> alter table service
        -> add ser_num varchar(10) not null after name;                //添加name字段之后

mysql> alter table service                       
        -> add sex enum('male','female') default 'male' first;          //添加到最前面
mysql> desc service;
+---------+-----------------------+------+-----+---------+----------------+
| Field   | Type                        | Null | Key | Default | Extra          |
+---------+-----------------------+------+-----+---------+----------------+
| sex     | enum('male','female') | YES  |     | male    |                |
| id       | int(11)                       | NO   | PRI | NULL    | auto_increment |
| name    | char(5)                    | YES  |     | NULL    |                |
| ser_num | varchar(10)           | NO   |     | NULL    |                |
| message | varchar(20)           | NO   |     | NULL    |                |
| age       | int(3)                       | NO   |     | 22      |                |
+---------+-----------------------+------+-----+---------+----------------+
6 rows in set (0.04 sec)

3. 删除字段
mysql> alter table service
        -> drop sex;

4. 修改字段类型modify
mysql> alter table servce
        -> modify age int();
mysql> alter table service
        -> modify id int(11) not null primary key auto_increment;    //修改为主键

5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table service modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

mysql> alter table service modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 对已经存在的表增加复合主键
mysql> alter table service2
        -> add primary key(host_ip,port);        

7. 增加主键
mysql> alter table student1
        -> modify name varchar(10) not null primary key;

8. 增加主键和自动增长
mysql> alter table student1
        -> modify id int not null primary key auto_increment;

9. 删除主键
a. 删除自增约束
mysql> alter table student10 modify id int(11) not null; 

b. 删除主键
mysql> alter table student10                                 
        -> drop primary key;
修改表

15.复制表

复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

只复制表结构
mysql> select * from service where 1=2;        //条件为假,查不到任何记录
Empty set (0.00 sec)
mysql> create table new1_service select * from service where 1=2;  
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create table t4 like employees;
复制表

 




posted @ 2017-10-22 18:27  星雨5213  阅读(219)  评论(0编辑  收藏  举报