您的位置:首页 > 数据库 > MySQL

MySQL基础知识

2018-03-09 21:09 369 查看
本文为自己对MySQL数据库基础知识的一些笔记整理。
MySQL:关系型数据库
1.选择数据库3点:
    1).是否开源,2).是否跨平台,3).看公司类型
开源并且也跨平台的数据库:
    MySQL,MariDB,MongoDB
2.关系型数据库的核心内容是关系,即二维表
3. 启动和连接MySQL服务
   1).启动(路径根据个人实际路径有所不同)
      a.查看MySQL服务的状态
        sudo /etc/init.d/mysql status
      b.停止MySQL服务的状态
        sudo /etc/init.d/mysql stop
      b.启动MySQL服务的状态
        sudo /etc/init.d/mysql start
      b.重启MySQL服务的状态
        sudo /etc/init.d/mysql restart
   2).连接
   mysql -u用户名 -p密码
    示例:
     mysql -uroot -p123456
     mysql -u root -p123456(-u后可以打空格,-p后打空格则连贯失败,还要输入密码)
4.使用\c终止命令
5.查看当前已有的库:show databases;
    创建库:create database 库名;
    查看表:先切换库:use 库名;然后show tables;
    删除库:drop database 库名;
    创建表:create table 表名(字段名 数据类型,字段名 数据类型...);
    删除表:drop table 表名;
    查看表结构:desc 表名;
    在表中插入记录:insert into 表名(字段1,字段2...) values(值1,值2...);
    查看表中记录:select * from 表名;(查看包含所有字段的记录);
                select 字段名1,字段名2... from 表名;(查看包含部分字段名的记录);
6.MySQL中的数值类型有:数值类型,字符类型,枚举类型,日期时间类型.
  1).char和varchar的区别?各自的特点        
       cahr:定长,浪费存储空间,性能高,常用于生产环境中
       varchar:变长,相对于varchar来说节省存储空间,但是性能比较低
  2).枚举类型:
    1>.单选enum:字段名 enum(值1,值2,...)
    2>.多选set:字段名 set(值1,值2...)
  3).日期时间类型:
     a. year:年 YYYY
     b. date:日期 YYYYMMDD
     c. time:时间 HHMMSS
     e. datetime:日期时间 YYYYMMDDHHMMSS
7.什么是ER模型,请举例说明 :            
    即实体关系模型:例如学生选课系统,为了减少数据库中数据的冗余,设计三张表,学生信息表记录学生信息,课程表用来记        录课程信息,教师表用来记录授课老师信息.
8.设置支持中文:
   1).创建库时设置库支持中文:create database 库名 default charset=utf8;
   2)创建表时设置表支持中文:create table 表名(字段名 数据类型)default charset = utf8;
9.表字段增删改查:
    增:alter table 表名 add 字段名 数据类型;
    删: alter table 表名 drop 字段名;
    改:alter table 表名 change 旧字段名 新字段名 类型;
    查:desc 表名;
    修改表名:alter table 表名 rename 新表名;
    修改字段的数据类型:alter table 表名 modify 字段名 新的数据类型;
10.表记录增删改查:
    增:insert into 表名(字段1,字段2...) values(值1,值2...);
    删:delete from 表名 where 条件子句;
    改:update 表名 set 字段名1=新值1,字段名2=新值2 where 条件子句;
    查:select * from 表名 where 条件子句;
        查部分:delect 字段名1,字段名2... from  表名;
11.聚合函数
  1).avg(字段名):求字段的平均值
  2).sum(字段名):求字段的和
  3).max(字段名):求字段的最大值
  4).min(字段名):求字段的最小值
  5).count(字段名):统计该字段的记录的个数
12.default 默认约束
    not null 非空约束
    primary key 主键约束  PRI 
    unique key 唯一约束   UNI
    foreign key 外键约束
    auto_increment 自增长属性
13.添加外键:
    1).创建表时添加:foreign key(参考字段名)  references 被参考表名(被参考字段名) [on  delete 级联动作(cascade) on update 级联动作(cascade)];
    2).在已有表中添加外键约束:
     alter table 从表名 add foreign key(从表参照字段) references 主表名(参照字段,主表) [on delete cascade on update cascade];
    注意:在已有表中添加外键时,会受到原有数据的限制
    删除外键:
     alter table 表名 drop foreign key 外键名; 
14.嵌套查询:sql查询语句 where 条件(sql查询语句);
15.多表查询(**笛卡尔集合)
 两种方式:
  1.select 字段名列表 from 表名列表1,表名2;  -->笛卡尔集
   示例:
    1)select * from t1,t2;
      select t1.username,t1.uid,t2.username from t1,t2;
  2.select 字段名列表 from 表名列表 where 条件;
   示例:
     1).找到t1表和t2表中相同的用户名,全部显示信息
      select * from t1,t2 where t1.username=t2.username;
     2).找到t1和t2表中相同的uid号,把两张表的uid和username都显示出来
      select t1.uid,t1.username,t2.uid,t2.username from t1,t2 where  t1.uid=t2.uid;
16.连接查询
  先创建两张表
    create table t3 select username,uid from userinfo limit 2;
    create table t4 select username,uid from userinfo limit 3;
  1.左连接
    select 字段名 from 表1 left join 表2 on 条件;(以左边的表1为主)
  示例:
    把t3和t4表中username相同的记录显示出来,以t3为主
    select * from t3 left join t4 on t3.username=t4.username;
    比较insert into t3 values("MYSQL",888),("Python",666);后再执行上句
  2.右连接
    select 字段名 from 表1 right join 表2 on 条件;(以右边的表2为主)
17.pymysql的使用:
    import pymysql
    try:
        # 1.创建数据库连接
        db = pymysql.connect("主机地址", "root", "密码")
        # 2.创建游标对象(用db对象的cursor方法创建游标)
        cursor = db.cursor()
        # 3.使用游标的方法和sql语句操控MySQL数据库
        cursor.execute("create database python;")
        cursor.execute("use python;")
        cursor.execute("create table t1(id int primary key,name char(20),age tinyint unsigned,sex enum('boy','girl'));")
        # 4.提交到数据库commit
        db.commit()
        # 5.关闭游标
        cursor.close()
        # 6.关闭数据库连接
        db.close()
    except Exception as e:
        raise e
        print(e)
18.数据库和表的导入、导出
  1).导出整个的数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    mysqldump -u root -p db_test >/home/bak/dbtest.sql
  2).导出指定数据库中的一个表:mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
    mysqldump -u root -p db_test tbl_user >/home/bak/test_user.sql
  3).只导出一个结构(struct):加上-d参数
    mysqldump -u root -p -d –add-drop-table db_test >/home/bak/btest_struct.sql
  4).只导出一个数据(data):加上-t参数
    mysqldump -u root -p -t –add-drop-table db_test >/home/bak/btest_struct.sql
    ⑴.只导出表结构 -d
    mysqldump -h 192.168.1.11 -u root -p 123456 -d fault-character-set=utf8   test >sql.sql
  ⑵.只导出数据 -t
    mysqldump -h 192.168.1.11 -u root -p 123456 -t –default-character-set=utf8 test >sql.sql
注:①.-d 没有数据(不导出数据,只导出数据结构和表结构)
     -t 不导出结构,只要数据
     –add-drop-table 在每个create语句之前增加一个drop table
     –default-character-set 设置字符集
   ②.这里的导出文件没有加路径,就是相对路径,当前的目录下的文件。
   ③.密码是显示输入的,跟在-p后面。
  5).导入数据库:source 命令
    [root@dream ~] mysql -u root -p #登陆
    mysql>use test;
    mysql>source /home/bak/db_test.sql
19.数据备份与恢复(在Linux终端中操作)
  1.数据备份
   mysqldump -u用户名 -p源库名 > 路径/(xxx.sql)  
    ()里的文件名可变,txt等格式也可以,最好用.sql
   2)备份所有的库
    源库名的表达方式
      --all-databases   备份所有库
      单个库名           备份单个库
      -B 库1 库2        备份多个库
      库名 表名          备份指定库的指定表
  2.数据恢复(在Linux终端中操作)
    语法:
      mysql -uroot -p 目标库名 < 路径/xxx.sql
    示例:
     1).恢复db3库
      mysql -uroot -p db3 < /home/tarena/maydata/db3.sql
     2).恢复所有的库
     mysql -uroot -p < /home/tarena/maydata/allku.sql
     3)从所有库的备份当中恢复一个库db2
     mysql -uroot -p db2 --one-database < /home/tarena/maydata/allku.sql
     4)恢复某个库中的表:
     mysql -uroot -p db3 < 路径kubiao.sql
    注意:
      在数据恢复时如果要恢复的库不存在,则先要创建一个空库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: