Mysql(基础篇)

Wesley13
• 阅读 654

linux下的mysql操作  

  1、# 打开 MySQL 服务

    sudo service mysql start

  2、#使用 root 用户登录,密码为空

    mysql -u root

  3、创建数据库

    CREATE DATABASE <数据库名字>;(注意不要漏掉分号 ;)

  4、连接数据库

    use <数据库名字>;

    show tables; (可以查看该数据库下的表)

  5、新建数据表    

    CREATE TABLE 表的名字
    (
    列名a 数据类型(数据长度),
    列名b 数据类型(数据长度),
    列名c 数据类型(数据长度)
    );

    select * from <表的名字>;  (查看表的内容)

  6、插入表内容   

    INSERT INTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);

  7、SQL的约束  

约束类型

主键约束

默认值约束

唯一约束

外键约束

非空约束

关键字

PRIMARY KEY

DEFAULT

UNIQUE

FOREIGN KEY

NOT NULL

    7、1 主键约束  

    主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。

    主键不能有重复且不能为空。

    Mysql(基础篇)

    Mysql(基础篇)

    Mysql(基础篇)

    7、2 默认值约束  

    默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。

    Mysql(基础篇)

    7、3 唯一约束

    唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。

    Mysql(基础篇)

    7、4 外键约束   

    外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。

    一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。

    Mysql(基础篇)

    7、5 非空约束

    非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。

    Mysql(基础篇)

   8、select语句

    8、1  select语句的基本格式:

      SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;

    8、2 数学符号条件

      SELECT name,age FROM employee WHERE age>25;

      SELECT name,age,phone FROM employee WHERE name='Mary';

    8、3 “AND"与“OR”

      #筛选出 age 小于 25,或 age 大于 30

      SELECT name,age FROM employee WHERE age<25 OR age>30;

      #筛选出 age 大于 25,且 age 小于 30

      SELECT name,age FROM employee WHERE age>25 AND age<30;

      而刚才的限制条件 age>25 AND age<30 ,如果需要包含25和30这两个数字的话,可以替换为 age BETWEEN 25 AND 30 

    8、4 IN 和NOT IN

      SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');

      SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');

    8、5 通配符

      关键字 LIKE 在SQL语句中和通配符一起使用,通配符代表未知字符。SQL中的通配符是 _ 和 % 。

      其中 _ 代表一个未指定字符,% 代表不定个未指定字符。

      比如,要只记得电话号码前四位数为1101,而后两位忘记了,则可以用两个 _ 通配符代替:

      SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';

另一种情况,比如只记名字的首字母,又不知道名字长度,则用 % 通配符代替不定个字符:

      SELECT name,age,phone FROM employee WHERE name LIKE 'J%';

    8、6 对结果排序

      为了使查询结果看起来更顺眼,我们可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。

      默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。

      比如,我们按salary降序排列,SQL语句为:

SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;

    8、7 内置函数与计算

      函数名: COUNT    SUM   AVG     MAX    MIN

      作用:  计数    求和   求平均值   最大值   最小值

    8、8 子查询

      上面讨论的 SELECT 语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息。

      例如:想要知道名为 "Tom" 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在project 表中。

      对于这样的情况,我们可以用子查询:

      SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt
      HAVING of_dpt IN
      (SELECT in_dpt FROM employee WHERE name='Tom');

    8、9 连接查询

      在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。

      连接的基本思想是把两个或多个表当作一个新的表来操作,如下:

      SELECT id,name,people_num
      FROM employee,department
      WHERE employee.in_dpt = department.dpt_name
      ORDER BY id;
      这条语句查询出的是,各员工所在部门的人数,其中员工的 id 和 name 来自 employee 表,people_num 来自 department 表

  9、数据库及表的删除和修改

     9、1 对数据库的修改

        DROP DATABASE <数据库名>   (传说中的从入门到删库)

     9、2 对一张表的修改

        重命名一张表:

          RENAME TABLE 原名 TO 新名字;

          ALTER TABLE 原名 RENAME 新名;

          ALTER TABLE 原名 RENAME TO 新名;

     9、3 删除一张表

        DROP TABLE <表名>

     9、4 对一列的修改(即对表结构的修改)

        1、增加一列:

          ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;

          ALTER TABLE 表名字 ADD 列名字 数据类型 约束;

        比如我们新增一列 weight (体重)放置在 age (年龄)的后面:

          ALTER TABLE employee ADD weight INT(4) DEFAULT 120 AFTER age;

        如果想放在第一列的位置,则使用 FIRST 关键词,如语句:

          ALTER TABLE employee ADD test INT(10) DEFAULT 11 FIRST;

        2、删除一列:

          删除表中的一列和刚才使用的新增一列的语句格式十分相似,只是把关键词 ADD 改为 DROP ,

          语句后面不需要有数据类型、约束或位置信息。具体语句格式:

            ALTER TABLE 表名字 DROP COLUMN 列名字;

            或: ALTER TABLE 表名字 DROP 列名字;

        3、重命名一列:

          这条语句其实不只可用于重命名一列,准确地说,它是对一个列做修改(CHANGE) :

          ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;

        4、改变数据类型:

          要修改一列的数据类型,除了使用刚才的CHANGE语句外,还可以用这样的MODIFY语句:

          ALTER TABLE 表名字 MODIFY 列名字 新数据类型;

          再次提醒,修改数据类型必须小心,因为这可能会导致数据丢失。      

     9、5 对表的内容修改

        1、修改表中某个值:

          UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件;

          注:一定要加WHERE的条件

        2、删除一行记录:

          删除表中的一行数据,也必须加上WHERE条件,否则整列的数据都会被删除。删除语句:

          DELETE FROM 表名字 WHERE 条件;

  10、其他基本操作

    索引:可以加快查询速度

    视图:是一种虚拟存在的表

    导入:从文件中导入数据到表

    导出:从表中导出到文件中

    备份:mysqldump 备份数据库到文件

    恢复:从文件恢复数据库

    1、索引

      索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容。

      当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行一一对比,

    然后返回满足条件的记录。这样做会消耗大量数据库系统时间,并造成大量磁盘 I/O 操作。

      而如果在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。

      对一张表中的某个列建立索引,有以下两种语句格式:

      ALTER TABLE 表名字 ADD INDEX 索引名 (列名);

      CREATE INDEX 索引名 ON 表名字 (列名);

    2、视图

      视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,

    这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。

      注意理解视图是虚拟的表:

        数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;

        使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;

        视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;

        在使用视图的时候,可以把它当作一张表。

      创建视图的语句格式为:

      CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;

    3、导入

      导入操作,可以把一个文件里的数据保存进一张表。导入语句格式为:

      LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;

    4、导出

      导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为:

      SELECT 列1,列2 INTO OUTFILE '文件路径和文件名' FROM 表名字;

      注意:语句中 “文件路径” 之下不能已经有同名文件。

    5、备份

      备份与导出的区别:

        导出的文件只是保存数据库中的数据;

        而备份,则是把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件。

      mysqldump 是 MySQL 用于备份数据库的实用程序。

      它主要产生一个 SQL 脚本文件,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT 等。

      使用 mysqldump 备份的语句:

      mysqldump -u root 数据库名>备份文件名; #备份整个数据库

      mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表

    6、恢复

      用备份文件恢复数据库,其实我们早就使用过了。在本次实验的开始,我们使用过这样一条命令:

      source /tmp/SQL6/MySQL-06.sql

      这就是一条恢复语句,它把 MySQL-06.sql 文件中保存的mysql_shiyan 数据库恢复。

      输入语句进行恢复,把备份的 bak.sql 恢复到 test 数据库:

      mysql -u root test < bak.sql

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这