MySQL数据库

Posted Wualin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库相关的知识,希望对你有一定的参考价值。

数据库

  1. 数据库服务器:运行数据库管理软件的计算机
  2. 数据库管理软件:mysql,oracle,db2,sqlserver
  3. 库:文件夹
  4. 表:文件
  5. 记录:食物一系列典型的特征
  6. 数据:描述事物特征的符号
  • 数据库的分类:
    • 关系型:sqllite,db2,oracle,access,sqlserver,mysql,关系型数据库需要有表结构
    • 非关系型:mongodb,redis,memcache:key-vavle结构存储
  • 统一字符编码
    • utf-8
  • 初识SQL语句
  1. DDL语句:
  2. DML语句:
  3. DCL语句:
    • 操作文件夹(库)
      • 增:create database db1 charset utf-8;
      • 查:show create database db1;查看所有show databases;
      • 改:alter database db1 charset gbk;
      • 删:drop database db1;
    • 操作文件(表)
      • 切换文件夹: use db1;
      • 查看当前所在文件夹:select database;
      • 增:create table t1(id int,name char);
      • 查:show create table t1;查看所有表:show tables;desc t1;
      • 改:alter table t1 modify name char(6);
      • 删: drop database db1;
    • 操作文件内容(记录)
      • 增:insert t1(id,name)values(1,‘egon‘),(2,‘egon2‘);
      • 查:select id,name from t1;(必须切换到当前库目录,否则需要增加库前缀)
      • 改:updata db1.t1 set name=‘SB‘;updata db1.t1 set name=‘ALEX‘ where id=1;
      • 删:delete from t1;delete from t1 where id =2;

库操作:

  • 语法:
create database 数据库名charset utf8;

表操作:

  • 存储引擎就是存储表的类型,查看mysql支持的存储引擎:show engines;
  • 指定表类型/存储引擎
create table t1(id int)engine=innodb;
create table t2(id int)engine=memory;
语法:
create table 表名(字段名 类型[()])
...

数据类型

* 整数类型:

字符类型

枚举类型和集合类型

约束条件not null 与default

* create table t1(id int(11)unsigned);在int确定数据类型后附加的约束条件
* not null:不能为空如果传空了就是默认值default
* create table t2(
    id int,
    name char(6)
    sex enum(‘male‘,‘female‘)not null default ‘male‘
    );

约束条件unique key:传入的值是唯一的

* create table department(id int,name char(10) unique);
* create table department(id int,name char(10),unique(id),unique(name));
* 联合唯一:create table services(id int,ip char(15),prot int,unique(id),unique(ipprot));

约束条件:primary key

* 约束:not null unique
* 存储引擎(innodb):对于innodb存储引擎来说,一张表内必须有一个主键
* 单列主键
    * create table t17(id int primary key,name char(16));
* 复合主键
    * create table t18(ip char(15),port int,primary key(ip,port));

约束条件auto_increment:自增

* create table t19(id int primary key auto_increment);在插入字段的时候只需要插入数据,id会自增
* auto_increment步长与起始设置:
    * 查看:show variables like ‘auto_inc%‘
    * 设置步长:
        * set session auto_increment_increment=5;
        * set global auto_increment_increment=5;
    * 设置起始偏移量:
        * set global auto_increment_offset=3;
    * 起始偏移量<=步长
* 使用delete表清空后,会记录上次自增到什么位置,再传值的时候会从上次结束的地方开始
* 使用truncate清空表后不会出现上述情况

约束条件foreign key建立表之间的关系

* 先建被关联的表,并且保证被关联的字段是唯一的,再建关联的表
    * create table dep(id int primary key,mame char(16),comment char(6));
    * create table emp(id int primaty key,name char(10),sex enum(‘male‘,‘female‘),dep_id int,foreign key(dep_id) references dep(id)); 
* 插入数据:
    * 先往被关联的表插入记录
    * 再往关联表插入记录
* 删除数据:
    * 先删除关联的数据
    * 再删除被关联的数据
    * 在建立关联表时:在foreign ket加上 on delete cascade与on update cascade 没有逗号
* 尽量不要去建立表关系,为了方便扩展尽量在逻辑层面去设计表关系

表关系之多对一

* 一个表的多条记录对应另外一个表的一条记录

表关系之多对多

* 一个表的一条记录对应另一个表的多条记录,并且另一个表的一条记录对应一个表的多条记录,解决方法是建立一个中间表,存放两个表之间的表关系

表关系一对一

* 一一对应的关系

记录的增删该查

插入数据:
1. 插入完整数据(顺序插入)
    语法一:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

    语法二:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n);

2. 指定字段插入数据
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

3. 插入多条记录
    语法:
    INSERT INTO 表名 VALUES
        (值1,值2,值3…值n),
        (值1,值2,值3…值n),
        (值1,值2,值3…值n);

4. 插入查询结果
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2
                    WHERE …;
更新数据
语法:
    UPDATE 表名 SET
        字段1=值1,
        字段2=值2,
        WHERE CONDITION;

示例:
    UPDATE mysql.user SET password=password(‘123’) 
        where user=’root’ and host=’localhost’;
删除数据
语法:
    DELETE FROM 表名 
        WHERE CONITION;

示例:
    DELETE FROM mysql.user 
        WHERE password=’’;

练习:
    更新MySQL root用户密码为mysql123
    删除除从本地登录的root用户以外的所有用户
单表查询
#语法
SELECT 字段1,字段2... FROM 表名
                    WHERE   条件
                    GROUP BY field
                    HAVING 筛选
                    ORDER BY field
                    LIMIT 限制条数
关键字的执行优先级:
from 找到表 
where   拿着where指定的约束条件,去文件/表中取出一条条记录
group by    将取出的一条条记录进行分组group by,如果没有group by 则整体作为一组
having      将分组的结果进行having过滤
select      执行select
distinct    去重
order by    将结果按条件排序
limit       限制结果的显示条数
  • where 约束:where字句中可以使用:
    • 比较运算符:> < >= <= <> !=
    • between 80 and 100 值在80到100之间
    • in(80,90,100)值是80或90或100
    • like ‘engo%‘
      pattern可以是%或_,%表示任意多字符,_表示一个字符
    • 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

以上是关于MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

硬核!管理mysql数据库的工具

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段