一、数据库安装配置

1)数据库的概念

  1. 、数据库相关概念
  2. 数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端)
  3. 数据库管理管理系统RDBMS(本质就是一个C/S架构的套接字软件)
  4. 库(文件夹)=====》数据库
  5. 表(文件)
  6. 记录:抽取一个事物所有典型的特征/数据
  7. egon,,,male,True
  8.  
  9. 数据
  10. name='egon' age= height= sex="male" beutiful=True
  11.  
  12. 、数据库管理系统/软件分类:
  13. 关系型:
  14. 有表结构,存取数据前必先定义表结构,存数据必须按照字段的类型或者约束来
  15. 典型代表:MySQLOracleDB2SQL server
  16. 非关系型:
  17. 存取数据都是采用key:value的形式
  18. 非关系型:Mongodbredismemcache

2)mysql数据库的下载

社区版本

下载地址: https://dev.mysql.com/downloads/mysql/5.7.html#downloads

选择版本

根据电脑需求下载

不需要注册,直接下载

3)mysql的安装使用

解压即安装,

bin目录存放于环境变量里面

管理员用户启动cmd,输入mysqld启动mysql服务器程序

mysql -h 127.0.0.1 -P 3306 -uroot -p   启动客户端程序,没有密码直接登录

简写本地登录:mysql -uroot -p

4)修改root密码操作

修改成空密码

破解root密码方法

跳过授权表启动服务端,客户端登录则无需要密码

修改root密码

5)存的库,即data下的文件夹。performance_schema内存文件,及不会存在硬盘空间里面

  1. information_schema 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
  2. performance_schema MySQL .5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
  3. mysql 授权库,主要存储系统用户的权限信息
  4. test MySQL数据库系统自动创建的测试数据库

6)关闭mysql服务的方式,并制作系统服务

  杀死进程号,关闭mysql

mysql制作成系统服务

  1. 制作:先关闭
  2. 管理员cmd里面输入:mysqld --install
  3. 查看:
  4. windows+r
  5. 输入services.msc
  6. 制作完系统服务后就可以鼠标点击启动或关闭mysql
  7. windows+r
  8. 输入services.msc
  9. 找到mysql,启动或关闭

7)增加配置文件,my.ini,调字符编码

  1. [mysqld]
  2. character-set-server=utf8
  3. collation-server=utf8_general_ci
  4.  
  5. [client]
  6. default-character-set=utf8
  7.  
  8. [mysql]
  9. user="root"
  10. password=""
  11. default-character-set=utf8

my.ini

强调:utf8会存在字符集不兼容问题,需要将 utf8 改成 utf8mb4

重启服务   mysql> \s    查看修改结果

在Linux里面的mysql修改字符编码操作在 /etc/my.cnf 里面加上相应的内容。即可

二、MySQL数据库语法的使用

1)基本的SQL语句

  1. 、文件夹(库)

  2. create database db1 charset utf8;

  3. alter database db1 charset gbk;

  4. 查看所有库的库名
  5. show databases;
  6. 单独查看某一个库的信息
  7. show create database db1;

  8. drop database db1;
  9.  
  10. 、文件(表)
  11. 首先切换文件夹:
  12. use db1;
  13. select database(); #查看当前所在的文件夹

  14. create table t1(id int,name char);

  15. alter table t1 modify name char();

  16. 查看当前库下所有的表名
  17. show tables;
  18. 查看t1表的详细信息
  19. show create table t1;
  20. 查看表结构
  21. desc t1;
  22.  

  23. drop table t1;
  24.  
  25. 、文件的一行内容(记录)

  26. insert into db1.t1 values
  27. (,'egon'),
  28. (,'alex'),
  29. (,'lxx');

  30. update db1.t1 set name='sb' where id > ;

  31. select id,name from db1.t1;

  32. delete from db1.t1 where name = "SB" ;

实际操作方法

  1. 库操作
  2. mysql> create database db1 charset utf8; 创建库
  3. Query OK, row affected (0.07 sec)
  4.  
  5. mysql> show databases; 显示所有的库
  6.  
  7. mysql> show create database db1; 查看被创建库的信息
  8. +----------+--------------------------------------------------------------+
  9. | Database | Create Database |
  10. +----------+--------------------------------------------------------------+
  11. | db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
  12. +----------+--------------------------------------------------------------+
  13.  
  14. mysql> alter database db1 charset gbk; 修改库,只是修改库的字符编码,
  15. Query OK, row affected (0.01 sec)
  16.  
  17. mysql> show create database db1;
  18.  
  19. mysql> drop database db1; 删除库
  20.  
  21. 表操作
  22. mysql> create database db1; 修改了配置文件的字符编码,默认创建出来的就是 utf8
  23. Query OK, row affected (0.00 sec)
  24.  
  25. mysql> use db1; 切换到该库
  26. Database changed
  27. mysql> select database(); 查看当前在哪个库
  28. mysql> create table t1(id int,name char()); 创建表
  29. mysql> show create table t1; 查看被创建表的信息
  30. mysql> desc t1; 查看表结构
  31. +-------+----------+------+-----+---------+-------+
  32. | Field | Type | Null | Key | Default | Extra |
  33. +-------+----------+------+-----+---------+-------+
  34. | id | int() | YES | | NULL | |
  35. | name | char() | YES | | NULL | |
  36. +-------+----------+------+-----+---------+-------+
  37. mysql> alter table t1 modify name char(); 修改表信息的操作
  38. mysql> alter table t1 change name NAME char(); 字段名都能修改
  39. mysql> desc t1;
  40. +-------+----------+------+-----+---------+-------+
  41. | Field | Type | Null | Key | Default | Extra |
  42. +-------+----------+------+-----+---------+-------+
  43. | id | int() | YES | | NULL | |
  44. | NAME | char() | YES | | NULL | |
  45. +-------+----------+------+-----+---------+-------+
  46. rows in set (0.01 sec)
  47. mysql> drop table t1; 删表操作
  48.  
  49. 修改文件的一行内容(记录)
  50. mysql> create table t1(id int,name char());
  51. mysql> insert into db1.t1 values
  52. -> (,'egon'),
  53. -> (,'alex'),
  54. -> (,'lxx');
  55. Query OK, rows affected (0.10 sec)
  56. Records: Duplicates: Warnings:
  57. mysql> select id,name from t1;
  58. +------+------+
  59. | id | name |
  60. +------+------+
  61. | | egon |
  62. | | alex |
  63. | | lxx |
  64. +------+------+
  65. rows in set (0.00 sec)
  66. mysql> update t1 set name="sb" where id=; 单独修改某行操作
  67. mysql> select * from t1;
  68. +------+------+
  69. | id | name |
  70. +------+------+
  71. | | egon |
  72. | | alex |
  73. | | sb |
  74. +------+------+
  75. rows in set (0.00 sec
  76. mysql> delete from t1 where id >=; 删除某些行
  77. # delete 只能用于删除符合条件的某几条记录,不能用于清空表
  78. # 清空表应该使用truncate,不仅删除所有记录,而且将自增字段的值归0
  79. mysql> truncate t1; 清空表
  80. Query OK, rows affected (0.15 sec)

2)mysql支持的存储引擎

  1. show engines; 查看MySQL所支持的存储引擎
  2. create table t1(id int)engine=innodb; (默认)常用
  3. create table t2(id int)engine=myisam;
  4. create table t3(id int)engine=blackhole;
  5. create table t4(id int)engine=memory;

3)创建表的完整语法

  1. create table 表名(
  2. 字段名1 类型[(宽度) 约束条件],
  3. 字段名2 类型[(宽度) 约束条件],
  4. 字段名3 类型[(宽度) 约束条件]
  5. );
  6.  
  7. [ ] 内部条件可有可无
  8.  
  9. #解释:
  10. 类型:使用限制字段必须以什么样的数据类型传值
  11. 约束条件:约束条件是在类型之外添加一种额外的限制
  12.  
  13. # 注意:
  14. . 在同一张表中,字段名是不能相同
  15. . 宽度和约束条件可选,字段名和类型是必须的
  16. 、最后一个字段后不加逗号
  17.  
  18. create database db37; # 创建库
  19. create table t1(name char); # 语法结构:create table 表名(字段名1 类型[(宽度) 约束条件])
  20. desc t1; # 查看存储的类型
  21. insert into t1 values('egon'); # 由于上面创建的char类型默认存储1个字符,只能存储一个e
  22. create table t2(id int,name char not null); # 约束条件

4)清空表

  1. delete from tb1;
  2. 强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0
  3. 所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
  4.  
  5. delete from tb1 where id > ;
  6.  
  7. 如果要清空表,使用truncate tb1
  8. 作用:将整张表重置

5)修改表

  1. 语法:
  2. . 修改表名
  3. ALTER TABLE 表名
  4. RENAME 新表名;
  5. . 增加字段
  6. ALTER TABLE 表名
  7. ADD 字段名 数据类型 [完整性约束条件…],
  8. ADD 字段名 数据类型 [完整性约束条件…];
  9. ALTER TABLE 表名
  10. ADD 字段名 数据类型 [完整性约束条件…] FIRST;
  11. ALTER TABLE 表名
  12. ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
  13. . 删除字段
  14. ALTER TABLE 表名
  15. DROP 字段名;
  16. . 修改字段
  17. ALTER TABLE 表名
  18. MODIFY 字段名 数据类型 [完整性约束条件…];
  19. ALTER TABLE 表名
  20. CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
  21. ALTER TABLE 表名
  22. CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

示例

  1. . 修改存储引擎
  2. mysql> alter table service
  3. -> engine=innodb;
  4.  
  5. . 添加字段
  6. mysql> alter table student10
  7. -> add name varchar() not null,
  8. -> add age int() not null default ;
  9.  
  10. mysql> alter table student10
  11. -> add stu_num varchar() not null after name; //添加name字段之后
  12.  
  13. mysql> alter table student10
  14. -> add sex enum('male','female') default 'male' first; //添加到最前面
  15.  
  16. . 删除字段
  17. mysql> alter table student10
  18. -> drop sex;
  19.  
  20. mysql> alter table service
  21. -> drop mac;
  22.  
  23. . 修改字段类型modify
  24. mysql> alter table student10
  25. -> modify age int();
  26. mysql> alter table student10
  27. -> modify id int() not null primary key auto_increment; //修改为主键
  28.  
  29. . 增加约束(针对已有的主键增加auto_increment
  30. mysql> alter table student10 modify id int() not null primary key auto_increment;
  31. ERROR (): Multiple primary key defined
  32.  
  33. mysql> alter table student10 modify id int() not null auto_increment;
  34. Query OK, rows affected (0.01 sec)
  35. Records: Duplicates: Warnings:
  36.  
  37. . 对已经存在的表增加复合主键
  38. mysql> alter table service2
  39. -> add primary key(host_ip,port);
  40.  
  41. . 增加主键
  42. mysql> alter table student1
  43. -> modify name varchar() not null primary key;
  44.  
  45. . 增加主键和自动增长
  46. mysql> alter table student1
  47. -> modify id int not null primary key auto_increment;
  48.  
  49. . 删除主键
  50. a. 删除自增约束
  51. mysql> alter table student10 modify id int() not null;
  52.  
  53. b. 删除主键
  54. mysql> alter table student10
  55. -> drop primary key;

6)复制表操作。复制表结构+记录 (key不会复制: 主键、外键和索引)

  1. mysql> create table new_service select * from service;
  2.  
  3. 只复制表结构
  4. mysql> select * from service where =; //条件为假,查不到任何记录
  5. Empty set (0.00 sec)
  6. mysql> create table new1_service select * from service where =;
  7. Query OK, rows affected (0.00 sec)
  8. Records: Duplicates: Warnings:
  9.  
  10. mysql> create table t4 like employees;
  1. DROP TABLE 表名; 删除表

7)约束条件,约束条件与数据类型的宽度一样,都是可选参数

作用:用于保证数据的完整性和一致性

  1. PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录
  2. FOREIGN KEY (FK) 标识该字段为该表的外键
  3. NOT NULL 标识该字段不能为空
  4. UNIQUE KEY (UK) 标识该字段的值是唯一的
  5. AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
  6. DEFAULT 为该字段设置默认值
  7.  
  8. UNSIGNED 无符号
  9. ZEROFILL 使用0填充

说明

  1. . 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
  2. . 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
  3. sex enum('male','female') not null default 'male'
  4. age int unsigned NOT NULL default 必须为正值(无符号) 不允许为空 默认是20
  5. . 是否是key
  6. 主键 primary key
  7. 外键 foreign key
  8. 索引 (index,unique...)

三、数字类型

1)整型类型,建议用 int

  1. 、作用:id号,各种号码,年龄,等级
  2. 、分类:
  3. tinyint(**)
  4. int (*****)
  5. bigint(***)
  6.  
  7. 、测试:默认整型都是有符号的
  8. create table t1(x tinyint);
  9. insert into t1 values(),(-); # 超过范围,存取最大值
  10.  
  11. create table t2(x tinyint unsigned); # unsigned 约束条件,无符号
  12. insert into t2 values(-),();
  13.  
  14. create table t3(x int unsigned);
  15. #
  16. insert into t3 values();
  17.  
  18. create table t4(x int() unsigned);
  19. insert into t4 values();
  20.  
  21. 、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制
  22. 所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,
  23. 默认的显示宽度,足够显示完整当初存放的数据
  24.  
  25. # 显示时,不够8位用0填充,如果超出8位则正常显示
  26. create table t5(x int() unsigned zerofill);
  27. insert into t5 values();
  28. insert into t5 values();

实际操作案例

  1. mysql> create table t2(id tinyint);
  2. Query OK, rows affected (1.05 sec)
  3. mysql> insert into t2 values(-);
  4. Query OK, row affected (0.15 sec)
  5. mysql> insert into t2 values(); 严格模式,超过范围了
  6. ERROR (): Out of range value for column 'id' at row
  7. mysql> insert into t2 values();
  8. Query OK, row affected (0.07 sec)
  9. mysql> select * from t2;
  10. +------+
  11. | id |
  12. +------+
  13. | - |
  14. | |
  15. +------+
  16. mysql> select @@sql_mode; 查看全局模式
  17. +--------------------------------------------+
  18. | @@sql_mode |
  19. +--------------------------------------------+
  20. | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
  21. +--------------------------------------------+
  22.  
  23. mysql> create table t3(id tinyint unsigned); # 创建无符号的整数
  24. Query OK, rows affected (1.06 sec)
  25. mysql> insert into t3 values(-); # 说明表设计是无符号的,不能插入负数
  26. ERROR (): Out of range value for column 'id' at row
  27. mysql> create table t5(id int() unsigned);
  28. Query OK, rows affected (0.18 sec)
  29.  
  30. mysql> insert into t5 values();
  31. Query OK, row affected (0.06 sec)
  32. mysql> select * from t5; # int() 控制的是显示宽度,默认无法查看。unsigned zerofill 可以显示出来,0填充
  33. +------+
  34. | id |
  35. +------+
  36. | |
  37. +------+
  38. row in set (0.00 sec)
  39. create table t5(x int() unsigned zerofill);

2)sql_mode  修改为严格模式,比如超出范围报错等

  1. # 查看sql_mode
  2. mysql> show variables like "%sql_mode%";
  3. +----------------------------+---------------------+
  4. | Variable_name | Value |
  5. +----------------------------+---------------------+
  6. | binlogging_impossible_mode | IGNORE_ERROR |
  7. | block_encryption_mode | aes--ecb |
  8. | gtid_mode | OFF |
  9. | innodb_autoinc_lock_mode | |
  10. | innodb_strict_mode | OFF |
  11. | pseudo_slave_mode | OFF |
  12. | slave_exec_mode | STRICT |
  13. | sql_mode | STRICT_TRANS_TABLES |
  14. +----------------------------+---------------------+
  15. rows in set (0.00 sec)
  16.  
  17. #修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
  18. mysql> set global sql_mode="strict_trans_tables";

3)小数类型,建议用float

  1. 作用:存储身高、体重、薪资
  2. 分类:
  3. float (*****)
  4. double (**)
  5. decimal (**)
  6.  
  7. 测试:
  8. #相同点
  9. #、对于三者来说,都能存放30位小数,
  10. #不同点:
  11. 、精度的排序从低到高:float,double,decimal
  12. floatdouble类型能存放的整数位比decimal更多
  13.  
  14. create table t9(x float(,));
  15. create table t10(x double(,));
  16. create table t11(x decimal(,));
  17.  
  18. insert into t9 values(1.111111111111111111111111111111);
  19. insert into t10 values(1.111111111111111111111111111111);
  20. insert into t11 values(1.111111111111111111111111111111);
  21.  
  22. mysql> select * from t9;
  23. +----------------------------------+
  24. | x |
  25. +----------------------------------+
  26. | 1.111111164093017600000000000000 |
  27. +----------------------------------+
  28. row in set (0.00 sec)
  29.  
  30. mysql> select * from t10;
  31. +----------------------------------+
  32. | x |
  33. +----------------------------------+
  34. | 1.111111111111111200000000000000 |
  35. +----------------------------------+
  36. row in set (0.00 sec)
  37.  
  38. mysql> select * from t11;
  39. +----------------------------------+
  40. | x |
  41. +----------------------------------+
  42. | 1.111111111111111111111111111111 |
  43. +----------------------------------+
  44. row in set (0.00 sec)

四、其他常用类型

1)字符类型,char 和 varchar

char 和 varchar 的作用

  1. 、作用:姓名,地址,描述类的信息
  2.  
  3. 、分类:
  4. char() 定长,最大存放5个字符,不够5个字符,那么用空格补齐
  5. varchar() 变长,最大存放5个字符,传入几个字符,就存入几个字符

使用方法

  1. 测试:字符的宽度限制单位是字符个数
  2. create table t12(x char()); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符
  3. create table t13(y varchar());# 超出4个字符则报错,不够4个字符那么字符有几个就存几个
  4.  
  5. insert into t12 values('hello');
  6. insert into t13 values('hello');
  7.  
  8. insert into t12 values('a'); #'a '
  9. insert into t13 values('a'); #'a'
  10.  
  11. # 设置全局模式,查看字符长度
  12. set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
  13. select char_length(x) from t12; #
  14. select char_length(y) from t13; #
  15.  
  16. # 注意:
  17. 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中
  18. 但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用
  19. mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用
  20.  
  21. mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的
  22.  
  23. # 对比char与varchar
  24.  
  25. name char()
  26. # 缺点:浪费空间
  27. # 优点:存取速度都快
  28. egon alex lxx wxx yx
  29.  
  30. name varchar()
  31. # 缺点:存取速度都慢
  32. # 优点:节省空间
  33. (1bytes+egon)(1bytes+alex)(1bytes+lxx)

2)时间,日期类型

时间范围

  1. # 时间类型 time ,date, datetime,timestamp,year
  2. YEAR
  3. YYYY(/)
  4.  
  5. DATE
  6. YYYY-MM-DD(--/--)
  7.  
  8. TIME
  9. HH:MM:SS'-838:59:59'/'838:59:59'
  10.  
  11. DATETIME
  12.  
  13. YYYY-MM-DD HH:MM:SS(-- ::/-- :: Y
  14.  
  15. TIMESTAMP
  16.  
  17. YYYYMMDD HHMMSS(-- ::/ 年某时)
  18.  
  19. create table t7(x timestamp);
  20. = create table t7(x datetime not null default now());

使用方法,如果不考虑时间范围的话,请使用timestamp,因为和datetime相比,占用空间更小,且默认存放当前时间

  1. 、作用:时间相关
  2.  
  3. 、分类:
  4. date:--
  5. time: ::
  6. datetime:-- ::
  7. year:
  8.  
  9. 、测试
  10. create table student(
  11. id int,
  12. name char(),
  13. born_year year,
  14. birth date,
  15. class_time time,
  16. reg_time datetime
  17. );
  18.  
  19. insert into student values(,'egon','','2000-01-27','08:30:00','2013-11-11 11:11:11');

实际操作

  1. create table student(
  2. id int primary key auto_increment,
  3. name char(),
  4. born_year year,
  5. class_time time,
  6. birth date,
  7. reg_time datetime
  8. );
  9. insert into student(name,born_year,class_time,birth,reg_time) value
  10. ('egon',now(),now(),now(),now());
  11.  
  12. mysql> create table student(
  13. -> id int primary key auto_increment,
  14. -> name char(),
  15. -> born_year year,
  16. -> class_time time,
  17. -> birth date,
  18. -> reg_time datetime
  19. -> );
  20. Query OK, rows affected (0.40 sec)
  21. mysql> insert into student(name,born_year,class_time,birth,reg_time) value
  22. -> ('egon',now(),now(),now(),now());
  23. Query OK, row affected, warning (0.18 sec)
  24. mysql> select * from student;
  25. +----+------+-----------+------------+------------+---------------------+
  26. | id | name | born_year | class_time | birth | reg_time |
  27. +----+------+-----------+------------+------------+---------------------+
  28. | | egon | | :: | -- | -- :: |
  29. +----+------+-----------+------------+------------+---------------------+
  30. mysql> insert into student(birth) values('2018-08-08');
  31. Query OK, row affected (0.12 sec)
  32. mysql> select * from student;
  33. +----+------+-----------+------------+------------+---------------------+
  34. | id | name | born_year | class_time | birth | reg_time |
  35. +----+------+-----------+------------+------------+---------------------+
  36. | | egon | | :: | -- | -- :: |
  37. | | NULL | NULL | NULL | -- | NULL |
  38. +----+------+-----------+------------+------------+---------------------+
  39. rows in set (0.00 sec)
  40. mysql> create table t7(x timestamp); # 不传时间,则默认传入当前时间
  41. Query OK, rows affected (0.18 sec)
  42. mysql> insert into t7 values();
  43. Query OK, row affected (0.04 sec)
  44. mysql> select * from t7;
  45. +---------------------+
  46. | x |
  47. +---------------------+
  48. | -- :: |
  49. +---------------------+
  50. row in set (0.00 sec)

3)枚举与集合类型。选择类型

  1. 作用与分类:
  2. 枚举enum,多选一个
  3. 集合set,多选多
  4.  
  5. 测试
  6. create table teacher(
  7. id int,
  8. name char(),
  9. sex enum('male','female','others'),
  10. hobbies set('play','read','music','piao')
  11. );

实际操作

  1. # 枚举类型enum与集合类型set
  2. # enum: 多选一
  3. # set: 多选多
  4. create table emp(
  5. id int primary key auto_increment,
  6. name char(),
  7. sex enum('male','female','others'),
  8. hobbies set('play','read','music','piao')
  9. );
  10. insert into emp(name,sex,hobbies) values
  11. ('egon','male','play,music');
  12.  
  13. mysql> create table emp(
  14. -> id int primary key auto_increment,
  15. -> name char(),
  16. -> sex enum('male','female','others'),
  17. -> hobbies set('play','read','music','piao')
  18. -> );
  19. Query OK, rows affected (0.24 sec)
  20. mysql> insert into emp(name,sex,hobbies) values
  21. -> ('egon','male','play,music');
  22. Query OK, row affected (0.04 sec)
  23. mysql> select * from emp;
  24. +----+------+------+------------+
  25. | id | name | sex | hobbies |
  26. +----+------+------+------------+
  27. | | egon | male | play,music |
  28. +----+------+------+------------+

五、约束条件

1)not null + default   缺值,则使用默认值

  1. create table t15(
  2. id int,
  3. name char() not null,
  4. sex enum('male','female','other') not null default "male"
  5. );
  6. # 性别默认选择男性
  7.  
  8. alter table t15 modify name char() not null; # 单独修改表字段
  9.  
  10. insert into t15(id,name) values(,'alex')
  11. insert into t15(id,name) values
  12. (,'egon1'),
  13. (,'egon2'),
  14. (,'egon3');

2)限制字段的值唯一

  1. #单列唯一
  2. create table t16(
  3. id int unique,
  4. name char()
  5. );
  6.  
  7. # 联合唯一
  8. create table server(
  9. id int unique,
  10. ip char(),
  11. port int,
  12. unique(ip,port)
  13. );

3)约束条件之主键。primary key:单单从约束角度去看,primary key就等同于not null unique

  1. #强调(******)
  2. 、一张表中必须有,并且只能有一个主键
  3. 、一张表中都应该有一个id字段,而且应该把id字段做成主键

主键的使用

  1. create table t17(
  2. id int primary key,
  3. name char(),
  4. age int,
  5. sex char()
  6. )engine=innodb;
  7.  
  8. #联合主键
  9. create table t19(
  10. ip char(),
  11. port int,
  12. primary key(ip,port)
  13. );

auto_increment 与 与primary key连用,实现自增 id

  1. # primary key auto_increment
  2. create table t20(
  3. id int primary key auto_increment,
  4. name char()
  5. )engine=innodb;
  6.  
  7. # primary和auto_increment注意点:
  8. 、单从约束角度去看,主键的约束效果就是not null + unique
  9. 、但其实innodb存储引擎会以主键为准创建聚集索引
  10. 、通常与primary key连用,而且通常是给id字段加
  11. auto_incremnt只能给被定义成keyunique keyprimary key)的字段加
  12. 结论:
  13. 如果表的类型为innodb,那么在建立表时,应该有一个id字段
  14. 并且 id int primary key auto_increment

六、权限管理设置

1)创建授权用户

  1. create user 'egon'@'1.1.1.1' identified by '';
  2. create user 'egon'@'192.168.1.%' identified by '';
  3. create user 'egon'@'%' identified by '';

2)授权

  1. #授权:对文件夹,对文件,对文件某一字段的权限
  2. 查看帮助:help grant
  3. 常用权限有:select,update,alter,delete
  4. all可以代表除了grant之外的所有权限
  5.  
  6. #针对所有库的授权:*.*
  7. #只在user表中可以查到egon1用户的select权限被设置为Y
  8. grant select on *.* to 'egon1'@'localhost' identified by '';
  9.  
  10. #针对某一数据库:db1.*
  11. #只在db表中可以查到egon2用户的select权限被设置为Y
  12. grant select on db1.* to 'egon2'@'%' identified by '';
  13.  
  14. #针对某一个表:db1.t1
  15. #只在tables_priv表中可以查到egon3用户的select权限
  16. grant select on db1.t1 to 'egon3'@'%' identified by '';
  17.  
  18. #删除权限
  19. revoke select on db1.* from 'egon'@'%';

3)授权常用操作

  1. 服务端授权用户
  2. grant all on *.* to 'egon'@'192.168.1.%' identified by '';
  3. flush privileges;
  4.  
  5. 客户端连接
  6. mysql -uegon -p123 -h192.168.1.

mysql数据库的安装和基本使用的更多相关文章

  1. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  2. Linux学习之CentOS--CentOS6.4下Mysql数据库的安装与配置【转】

      如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--C ...

  3. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  4. Linux学习之CentOS6下Mysql数据库的安装与配置

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  5. Linux CentOS6.4下Mysql数据库的安装与配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  6. CentOS6.4/6.7下Mysql数据库的安装与配置(转载)

    通过RPM方式 给centos  安装mysql  最好有光盘,呵呵,网络也可以下载rpm安装包,不过文件较大. 1 挂载光盘 mount /dev/cdrom /mnt/cdrom/mount: b ...

  7. CentOS6.5下Mysql数据库的安装与配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  8. mysql数据库的安装步骤

    Redhat6.5 1.准备工作 卸载使用rpm包安装的mysql-server.mysql软件包 安装自带的ncurses-devel包 rpm -ivh /mnt/Packages/ncurses ...

  9. mysql数据库的安装与配置

    mysql数据库的安装与配置及workbench的简单使用 mysql数据库社区版下载:https://dev.mysql.com/downloads/installer/ 我这里选的是社区安装版(适 ...

  10. centos6.5 MySQL数据库的安装

    <div id="home"><div id="header"> <div id="blogTitle"> ...

随机推荐

  1. layer数据表格换行

    在使用layer数据表格的时候,默认是不可以换行的.这样显示 改动后 数据格式为   aa<br>bb就会显示为换行 比如我们的字符串是    a<br>b 这样的字符串浏览器 ...

  2. 牛客网Wannafly挑战赛15 B车辆安排(模拟)AND C 出队(规律)

    传送门 :B题:点我 C题: 点我 题目描述 有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数 输入描述: 第一行n第二行n个数,表示每个队伍的人数 ...

  3. glove

    glove - 必应词典 美[ɡlʌv]英[ɡlʌv] v.给戴手套:作…的手套 n.(分手指的)手套 网络分指手套:拳套:棒球之爱 变形复数:gloves:现在分词:gloving:过去分词:glo ...

  4. http://www.bugku.com:Bugku——jsfuckWEB5(http://120.24.86.145:8002/web5/index.php)

      今天又做了bugku上面的一道题.使用到了jsfuck,它是什么捏?   它是Javascript原子化的一种简易表达方式,用[]()!+就可以表示所有的Javascript字符,不依赖于浏览器. ...

  5. [剑指Offer]9-用两个栈实现队列

    题目链接 https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158&t ...

  6. jsp页面\n换行替换

    1,js替换 var text= $(this).text(); var reg = new RegExp("\\n","g");//g,表示全部替换. tex ...

  7. SQL Server 2008 R2如何生成带数据的数据库脚本

    1.对想要复制的数据库右键,“任务”,“生成脚本” 2.下面需要注意的是,默认情况下,只会生成仅架构的脚本,也就是说仅仅有表结构,而没有数据的空壳.所以需要额外的设置. 在设置脚本编写选项,选择“高级 ...

  8. MVC 学习(一)Linq to Entities 简单Demo

    Linq定义了一组标准查询符号,标准查询符允许查询作用于所有基于IEnumerable<T>接口源. 我们看看LINQ的总体架构.如下图所示 EF4.1 数据操作及持久化,常见的是Data ...

  9. AngularJS——第7章 依赖注入

    第7章 依赖注入 AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 所谓依赖注入是指在运行时自动查找依赖关 ...

  10. 克隆后没有IP

    删除文件:  /etc/udev/rules.d/70-persistent-net.rules 将/etc/sysconfig/network-scripts/ifcfg-eth0 中的HWADDR ...