mysql 基本使用方法

描述:mysql 是开源的关系型数据库,学习它之前可以先在本地安装一个典型的mysql 数据库,并将mysql 安装目录下的bin 目录配置到系统环境变量的PATH中,这样就可以在任意路径下登录mysql客户端,可以百度获取配置方式。

mysql的默认端口是3306,mysql的超级用户是root, mysql创建输入库是CREATE DATABASE, 修改数据库是ALTER DATABASE,删除数据库 DROP DATABASE。

从mysql 的bin 目录下进入mysql的客户端,输入:mysql -hlocalhost -uroot -p 回车,再输入密码 回车,就可以登录mysql 客户端,可以对mysql 数据库实行命令操作,输入exit, quit, \q 三个中的任意一个命令,对mysql 客户端退出操作。

mysql 语句规范:

1:关键字和函数名都要大写;

2:数据库名,表名,字段名要小写;

3:每条sql语句都要以分号结尾;

注意: 及时关键字和函数名写成小写,系统也是确认的,一般用来区别关键字,函数,数据库名,表名,字段名,书写的时候要严格遵守。

一些常用的命令:

SHOW DATABASES;     //查看数据库列表

USE databaseName ;    //使用databaseName 数据库

SHOW TABLES;   // 查看databaseName 数据库中的表

CREATE DATABASE IF NOT EXISTS  databaseName;  //创建databaseName数据库

ALTER DATABASE databaseName CHARACTER SET utf8;  //修改数据库databaseName的字符编码格式为utf8

DROP DATABASE IF EXISTS databaseName;   //删除数据库databaseName

注意:数据库的创建做if not exists, 删除做if exists, 修改则没有这个判断存在的关键字。

 

数据类型

存储数字:

    存放整数的类型有整型:TINYINT, SMALLINT, MEDIUMINT,  INT, BIGINT。

    存放小数的类型有浮点型:FLOAT, DOUBLE。

存储日期时间:YEAR, TIME, DATE,  DATETIME, TIMESTAMP。

存储字符型:CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET。

注意:存储范围越大,占用的空间就越大,使用过程中,根据使用场景,选择最合理最合适的数据类型,而不是存储范围最大的数据类型。

 

数据表的操作

USE DATABASEName; //使用DATABASEName 数据库

SELECT DATABASE(); //查看当前使用的数据库名称

创建数据库语法:

CREATE TABLE [IF NOT EXISTS] TABLENAME (

  column_name data_type,

  ……

);

SHOW TABLES;  // 查看当前数据库中是否有刚刚新建的表

SHOW TABLES FROM  otherDatabaseName;  // 查看其他数据库中的表 后面还可以带 LIKE, WHERE 模糊查询或查询条件 的通配符。

SHOW COLUMNS FROM tableName; // 查看表中的列

记录操作

  INSERT

    INSERT INTO tb1 [column_name, ……] VALUES(val, ……);  // 如何前面的列名省略,则所有字段全部赋值,如果只给部分字段赋值,则必须制定列名

  SELECT

    SELECT expr, … FROM tableName;  //查询表中的记录,证明记录是否存在

  NULL, NOT NULL 

    允许为空或非空约束指定字段在数据录入的时候是否为空,二者只能选其一作用一个字段。不为空的字段在录入数据的时候必须为其赋值。

  AUTO_INCREMENT

    保证记录的唯一性,字段值不会重复,自动编号,且必须与主键组合使用,默认情况下起始值为1, 每次的增量为1。可以是整数,或者浮点数,浮点数的小数位数必须是0,比如float(7, 0), double(7, 0)。

  PRIMARY_KEY

    主键约束,每张表只能存在一个主键,主键保证记录的唯一性,主键自动为NOT NULL 。

  注意:auto_increment 必须与主键 primary_key 一起使用,但主键 primary_key 不一定要与iauto_increment 一起使用。

  UNIQUE_KEY

    唯一约束,可以保证记录的唯一性,唯一约束的字段可以为空值(NULL),每一张数据表可以存放多个唯一约束。

  DEFAULT

    默认约束,当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

  FOREIGN_KEY

    外键约束保持数据的一致性与完整性,实现一对一或一对多的关系。

    要求: 1,父表和子表必须使用相同的存储引擎,而且禁止使用临时表。

        2, 数据表的存储引擎只能是InnoDB。

        3,外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同。

        4,外键列和参照列必须创建索引,如果参照列不存在索引的话,Mysql 将自动创建索引。

  约束: 1,约束保证数据的完整性和一致性。

      2,约束分为表级约束和列级约束(约束如何是针对一个字段就是列级,如果是针对两个及以上的则为表级约束)。

      3,约束类型包括: NOT NULL(非空约束), PRIMARY KEY(主键约束), UNIQUE KEY(唯一约束), DEFAULT(默认约束), FOREIGN KEY(外键约束)

  外键约束的参照操作:

    1,CASSADE:从父表删除或更新且自动删除或更新子表中匹配的行。

    2,SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL.如果使用该选项,必须保证子表列没有指定NOT NULL。

    3,RESTRICT:拒绝对父表的删除或更新操作。

    4,NO ACTION:标准SQL的关键字,在mysql中与RESTRICT相同。

修改数据表

  ALTER TABLE tableName ADD [COLUMN] column_name column_definition [FIRST|AFTER col_name];  // 修改数据表,新增字段,可以一次加一列,也可以加多列,加多列不可以指定位置关系,只能在原来数据表的下方。

  ALTER TABLE tableName DROP column_name;// 删除数据表中的字段

修改列定义

  ALTER TABLE tableName MODIFY  [COLUMN] column_name column_definition [FIRST|AFTER col_name];

修改列名称

  ALTER TABLE tableName CHANGE  [COLUMN] column_name column_definition [FIRST|AFTER col_name];

修改数据表名

  ALTER TABLE tbl_name TO new_tb1_name; // 会对表的视图或存储过程有影响。

  UPDATE

    UPDATE tableName set col_name = value, … WHERE expr…;

    UPDATE table_references SET col_names = {expre1|DEFAULT} ... [WHERE(where_condition)];   //多表更新

  DELETE

    DELETE FROM tableName WHERE expr...;

  SELECT

    select 子查询,是指出现在其他sql 语句内的select子句;使用比较运算符的子查询,=, >, <, >=, <=, <>, !=, <=>, 另外使用ANY, SOME, ALL 关键字修饰的比较运算符,使用 [NOT] IN 的子查询,使用 [NOT] EXISTS 的子查询;

    INSERT [INTO] tableName [(col_name, ...)] SELECT  ...   将查询结果写入到数据表

    CREATE ... SELECT...;   //创建数据表的同事将查询结果写入到数据表      CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition, ...)] select_statement

  WHERE,  LIKE, GROUP BY, HAVING, ORDER BY[]

 

表的连接诶类型

  INNER JOIN, LEFT JOIN, RIGHT JOIN, 使用ON关键字来设定连接条件,也可以使用WHERE 来代替,通常使用ON关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤。

  内连接,显示左表及右表符合链接条件的记录,取交集。

  左连接,显示左表的全部记录及右表符合连接条件的记录。

  右连接,显示右表中的全部记录及左表符合连接条件的记录。

mysql数据库函数分类

  1,字符函数

    CONCAT()   //字符连接

    CONCAT_WS()   //使用指定的分隔符进行字符连接

    FORMAT()  //数字格式化

    LOWER()  //转换成小写字母

    UPPER()  //转换成大写字母

    LEFT()  //获取左侧字符

    RIGHT()  //获取右侧字符

    LENGTH()  //获取字符串长度

    LTRIM()  //删除前导空格

    RTRIM() //删除后续空格

    TRIM()  //删除前导和后续空格

    SUBSTRING()  //字符串截取

    [NOT] LIKE  //模式匹配

    REPLACE()  //字符串替换    

  2,数值运算符与函数

    CEIL()  //进一取整

    DIV()  //整数除法

    FLOOR()  //舍一取整

    MOD()  //取余数(取模)

    POWER()  //幂运算

    ROUND()  //四舍五入

    TRUNCATE()  //数字截取

  3,比较运算符与函数

    [NOT] BETWEN ... AND ...  //[不]在范围之内

    [NOT] IN()   //[不]在列出值范围内

    IS [NOT] NULL  //[不]为空

  4,日期时间函数

    NOW()  //当前日期和时间

    CURDATE()  //当前日期

    CURTIME()  //当前时间

    DATE_ADD()  //日期变化

    DATEDIFF()  //日期差值

    DATE_FORMAT()  //日期格式化

  5,信息函数

    CONNECTION_ID()  //连接ID

    DATABASE()  //当前数据库

    LAST_INSERT_ID()  //最后插入记录的ID号

    USER()  //当前用户

    VERSION()  //版本信息

  6,聚合函数

    AVG()  //平均值

    COUNT()  //计数

    MAX()  //最大值

    MIN()  //最小值

    SUM()  //求和

  7,加密函数

    MD5()  //信息摘要算法  web页面应用

    PASSWORD() //密码算法  mysql 用户密码修改

自定义函数

    CREATE FUNCTION function_name([params  params_type, ...]) RETURNS {STRING|INTEGER|REAL|DECIMAL} RETURN routine_body

    如:创建一个日期格式化的函数

      create function f1() returns varchar(30)

      return date_format(now(), '%Y年%m月%d日 %H点:%i分:%s秒');

    调用函数:select f1();

    如:创建一个求两个参数平均值的函数

      create function f2(num1 smallint unsigned, num2 smallint unsigned)

      returns float(10, 2)

      return (num1+num2)/2;

    调用函数:select f2(7, 8);

    注意:参数和返回值。

     关于函数体:

      1,函数体由合法的SQL语句构成

      2,函数体可以是简单的SELECT或INSERT语句

      3,函数体如果为复合结构则使用BEGIN...END语句

      4,复合机构可以包含声明,循环,控制结构;

存储过程

  存储过程是SQL语句和控制语句的预编译集合,以一个名词存储并作为一个单元处理。

   优点:1,增强SQL语句的功能和灵活性;2,实现较快的执行速度;3,减少了网络流量;

   CREATE  [definer = {user|CURRENT_USER}] 

   PROCEDURE proc_name ([proc_parameter [, ...]])

   [characteristic ...] routine_body

 

   proc_parameter: [ IN | OUT | INOUT ]  param_name type   注意:IN ,表示该参数的值必须在调用存储过程时指定; OUT,表示该参数的值可以被存储过程改变,并且可以返回;INOUT,表示该参数的调用时指定,并且可以被改变和返回.

MySQL存储引擎

  MySQL可以将。数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。

   并发控制:

    - 当多个连接对记录进行修改时保证数据的一致性和完整性。

   锁:

    -共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。

    -排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。

   锁颗粒:

    -表锁:是一种开销最小的锁策略。对一张表进行加锁处理。

    -行锁:是一种开销最大的锁策略。可能对表中的每一行记录进行加锁处理。

   事务处理:

    -事务用语保证数据库的完整性;

    特性:原子性,一致性,隔离性,持久性。

   外键:

    -是保证数据一致性的策略。

   索引:

    -是对数据表中的一列或多谢的值进行排序的一种结构。

kMySQL的存储引擎种类:

     -MyISAM:

     -InnoDB

     -Memory

     -CSV

     -Archive

    注意:不同的存储引擎,对事务的支持,锁的策略,外键,数据压缩,存储内存是不一样的。

 

注意:mysql的使用过程中,需要多实践,针对不同的聚合函数,数据函数,关键字等的组合使用,非常有意思,需要深入学习。

posted @ 2019-11-22 19:00  anunicode  阅读(667)  评论(0编辑  收藏  举报