zoukankan      html  css  js  c++  java
  • 02-MySQL基础

    MySQL基础

    1.存储引擎

    1.1MyISAM

    MySQL5.5以及之前默认存储引擎MyISAM

    如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。

    MyISAM一个表对应三个文件表结构、表中的数据、存储索引

    1.2InnoDB

    MySQL5.6之后默认存储引擎InnoDB

    用于事务处理应用程序,支持外键和行级锁。

    InnoDB一个表对应两个文件表结构、表中的数据和索引存在一个文件

    2.InnoDB介绍

    1- 事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

    2- 支持行级锁和表级锁,默认为行级锁。

     表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);锁定粒度大,发生锁冲突的概率最高,并发度最低。
     行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

    3- 外键(froeign key)外键为某个表中的一列,它包含两一个表的主键值,定义了两个表之间的关系。

    3.查看数据库的存储引擎

    # 查看数据库的默认存储引擎
    mysql> show variables like "default_storage_engine";
    +------------------------+--------+
    | Variable_name          | Value  |
    +------------------------+--------+
    | default_storage_engine | InnoDB |
    +------------------------+--------+
    1 row in set, 1 warning (0.00 sec)
    
    # 查看数据库支持的存储引擎
    mysql> show engines;
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
    | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
    | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
    | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
    | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
    | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
    | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
    | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
    | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
    +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    9 rows in set (0.00 sec)
    

    4.指定存储引擎

    4.1在见表时指定存储引擎

    # 创建存储引擎为InnoDB的表
    mysql> create table indb (id int, name char(12)) engine=innodb;
    Query OK, 0 rows affected (0.04 sec)
    # 创建存储引擎为MyISAM的表
    mysql> create table myam (id int, name char(12)) engine=myisam;
    Query OK, 0 rows affected (0.01 sec)
    # 修改表的存储引擎
    mysql> alter table indb engine=myisam;
    Query OK, 0 rows affected (0.04 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    4.2在配置文件中指定存储引擎

    查看my.ini配置文件
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB

    5.MySQL常见数据类型

    类型 大小 范围(有符号) 范围(无符号)unsigned约束 用途
    int  1字节 (-128,127) (0,255) 小整数值
    float

    4 字节

    float(255,30)

    (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
    浮点数值
    char

    0-255字节

    - - 定长字符串
    varchar 0-65535 字节 - - 变长字符串
    datetime 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 年月日时分秒
    enum

    对1-255个成员的枚举需要1个字节存储;

    对于255-65535个成员,需要2个字节存储;

    最多允许65535个成员。

    - - 选择性别
    set

    1-8个成员的集合,占1个字节

    9-16个成员的集合,占2个字节

    17-24个成员的集合,占3个字节

    25-32个成员的集合,占4个字节

    33-64个成员的集合,占8个字节

    - - 多选:兴趣爱好

    常见数据类型说明

    字符串,描述的都是字符
    	# char 定长字段 255 相对浪费空间 存取的速度比varchar要快
    		# char(10)
    		# 'hellohello1'  --> 'hellohello'
    		# 'hello      '
    	# varchar  变长字段 65535  相对节省空间 存取的速度比varchar要慢
    		# varchar(200)
    		# 'hellohello1'  --> '10hellohello'
    		# 'hello'  --> '5hello'
    	# 常见的场景
    		# 手机号 char(11)
    		# 身份证号 char(18)
    		# 用户名 char(14)
    		# 密码 char(12)
    		# 评论 varchar
    时间
    	# datetime
    集合和枚举
    	# hobby set('抽烟','喝酒','烫头')
    	# gender enum('男','女')
    

    6.MySQL的约束条件

    not null :非空约束,指定某列不能为空;
    
    default:默认值约束,指定某列的默认值
    
    unique:唯一约束,指定某列或者几列组合不能重复;
    
    auto_increment:自增约束,指定某int、非空列自动增加
    
    primary key:主键,指定该列的值可以唯一地标识该列记录
    
    foreign key:外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性

     not null

    mysql> create table not_null (id int not null);
    Query OK, 0 rows affected (0.69 sec)
    
    mysql> desc not_null;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | NO   |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    1 row in set (0.01 sec)
    
    mysql> insert into not_null values (null);
    ERROR 1048 (23000): Column 'id' cannot be null
    mysql> insert into not_null values(1);
    Query OK, 1 row affected (0.40 sec)
    
    mysql> desc not_null;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | NO   |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    1 row in set (0.00 sec)
    
    mysql> select * from not_null;
    +----+
    | id |
    +----+
    |  1 |
    +----+
    1 row in set (0.00 sec)
    

    default

    mysql> create table name_sex (id int, name char(12), sex char(10) default 'male');
    Query OK, 0 rows affected (0.52 sec)
    
    mysql> desc name_sex;
    +-------+----------+------+-----+---------+-------+
    | Field | Type     | Null | Key | Default | Extra |
    +-------+----------+------+-----+---------+-------+
    | id    | int(11)  | YES  |     | NULL    |       |
    | name  | char(12) | YES  |     | NULL    |       |
    | sex   | char(10) | YES  |     | male    |       |
    +-------+----------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    mysql> insert into name_sex (name) values ('zhangsan');
    Query OK, 1 row affected (0.44 sec)
    
    mysql> select * from name_sex;
    +------+----------+------+
    | id   | name     | sex  |
    +------+----------+------+
    | NULL | zhangsan | male |
    +------+----------+------+
    1 row in set (0.00 sec)
    
    mysql> insert into name_sex (id, name) values (2, 'lisi');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> select * from name_sex;
    +------+----------+------+
    | id   | name     | sex  |
    +------+----------+------+
    | NULL | zhangsan | male |
    |    2 | lisi     | male |
    +------+----------+------+
    2 rows in set (0.00 sec)
    
    mysql> insert into name_sex (name, sex) values ('wangwu', 'female');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> select * from name_sex;
    +------+----------+--------+
    | id   | name     | sex    |
    +------+----------+--------+
    | NULL | zhangsan | male   |
    |    2 | lisi     | male   |
    | NULL | wangwu   | female |
    +------+----------+--------+
    3 rows in set (0.00 sec)
    

      

  • 相关阅读:
    Nginx反向代理和jetty服务器配置
    如何使用canvas绘图
    毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
    如何提高用户逃离成本
    首次创业者必须知道哪些基本常识?
    拦截器、过滤器、监听器各有什么作用
    第一人称入行分享贴:大学混了四年,如何顺利入行互联网
    线下学习
    如何实现数组深拷贝和浅拷贝?
    从零学前端第二讲:CSS行内块级元素布局与定位
  • 原文地址:https://www.cnblogs.com/gongniue/p/10553162.html
Copyright © 2011-2022 走看看