美文网首页
mysql学习

mysql学习

作者: blossom_绽放 | 来源:发表于2017-12-14 11:10 被阅读9次

    对于mysql的学习,感谢菜鸟教程宁皓网提供的优秀资料
    随着学习的深入,此文章持续更新...


    MySQL是一个关系型数据库管理系统,下面是一些术语解释:

    • 数据库: 数据库是一些关联表的集合。.
    • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
    • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
    • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
    • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
    • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
    • 外键:外键用于关联两个表。
    • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
    • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

    基本命令

    方法 作用
    mysql.server start 开启
    mysql.server stop 关闭
    mysql.server restart 重启
    mysql.server reload 重加载
    mysql.server force-reload 强制重载
    mysql.server status 状态
    # 命令行导入数据库
    $ mysql -u root -p 数据库 < 数据库文件.sql;
    

    用户

    # 用户登录 默认本地  显示警告信息
    $ mysql [-h hostname] -u uesr [-p ] [--show-warnings]
    
    # 创建新用户  localhost: 本地
    $ CREATE USER 'name'@'localhost' IDENTIFIED BY 'password';
    
    # 权限: ALL PRIVILEGES 表示所有  数据库.数据表: .表示所有   数据库.* 表示某个库的所有表 主机名:localhost
    $ GRANT 权限 ON 数据库.数据表 TO '用户'@'主机名' [IDENTIFIED BY '密码'];
    
    # 修改立即生效
    $ flush privileges;
    
    # 查看数据库系统里面的所有的用户
    $ select user from mysql.user;
    
    # 查看表里的所有的字段
    $ desc mysql.user;
    
    # 查看 mysql 全局系统里面的用户的select_priv权限
    $ select user, select_priv from mysql.user;
    
    # 查看特定的数据库上的权限
    $ select user, db, select_priv from mysql.db;
    
    # 查看一下用户拥有的权限
    $ show grants for blssom@localhost
    
    # 删除更新 删除权限 在某个数据库的所有表上 
    $ revoke update, delete on 数据库.* from blssom@localhost
    
    # 为用户设置密码"hello"
    $ set password for blssom@localhost = password('hello');
    
    # 删除用户 
    $ drop user blssom@localhost
    

    数据库

    数据类型 作用
    varchar(255) 最大255字节的string
    date 时间
    TEXT 长文本
    INT(10) 最大10位数字
    # 创建数据库 (如果不存在再创建)
    $ CREATE DATABASE [IF NOT EXISTS] blssomHome [charset=utf8]
    
    # 显示所有数据库
    $ show databases;
    
    # 切换 数据库
    $ USE blssomHome;
    
    # 删除 数据库
    $ DROP DATABASE blssomHome;
    
    # 显示数据库的所有表
    $ SHOW TABLES;
    
    # 创建数据表 film定义3个字段unsigned:不能为负
    $ CREATE TABLE film(
    id INT(10) unsigned not null auto_increment,
    name varchar(255)  DEFAULT 0 COMMENT '这里是注释',
    date date,
    PRIMARY KEY(id)
    ) default charset=utf8
    ;
    
    # 查看数据表详细信息
    $ DESCRIBE film;
    
    # ALTER TABLE 语句 添加字段在开头(默认末尾)
    $ ALTER TABLE film ADD fid INT(10) FIRST;
    
    # ALTER TABLE 语句 添加字段在name之后
    $ ALTER TABLE film ADD fid INT(10) AFTER name;
    
    # PRIMARY KEY 添加主键
    $ ALTER TABLE film ADD PRIMARY KEY (fid);
    
    # 改变数据栏名字
    $ ALTER TABLE film CHANGE fid film_id INT(10);
    
    # 重命名数据表
    $ ALTER TABLE film RENAME TO movie;
    
    # 删除数据栏
    $ ALTER TABLE movie DROP film_content;
    
    # 删除数据表
    $ DROP TABLE movie;
    

    查询

    # 添加数据 按顺序添加 按栏添加
    $ INSERT INTO 数据表 (栏1, 栏2, 栏3) VALUES (值1, 值2, 值3);
    $ INSERT INTO people VALUES (NULL, '华盛顿', '1954-12-28', '美国');
    $ INSERT INTO people (name, location) VALUES ('安吉莉娜', '美国');
    
    # 删除数据
    $ DELETE FROM 表名称 WHERE 字段 = 值;
    $ DELETE FROM people WHERE pid = 4;
    
    # 更新数据
    $ UPDATE 表名称 SET 字段 = '值' WHERE 字段 = 值;
    $ UPDATE people SET birth = '1975-06-04' WHERE pid = 3;
    
    # 查询数据  分栏查询 (*)所有 
    $ SELECT 栏1,栏2,栏3... FROM 数据表;
    $ SELECT * FROM people;  
    
    # where 限制条件
    $ SELECT * FROM people WHERE location = '美国';
    
    # ORDER BY 排序 默认ASC升序(DESC降序)
    $ SELECT * FROM people ORDER BY people_birth DESC;
    
    # LIMIT 限制查询数量  OFFSET 查询开始的偏移量
    $ SELECT * FROM people WHERE location = '美国' LIMIT 3;
    $ SELECT * FROM people LIMIT 3 OFFSET 1;
    $ SELECT * FROM people LIMIT 1, 3;(等价于上一条) 
    
    # 比较(大于,小于,大于等于,小于等于,或者不等于)
    $ SELECT * FROM people WHERE birth > '1960-01-01';
    
    # 逻辑(AND:并且 OR:或者)
    $ SELECT * FROM people WHERE birth > '1960-01-01' AND birth < '1970-01-01';
    $ SELECT * FROM people WHERE birth > '1970-01-01' OR birth < '1960-01-01';
    
    # IN:一个值在一个集合里面  NOT IN:不在
    $ SELECT * FROM people WHERE location IN ('美国', '英国');
    $ SELECT * FROM people WHERE location NOT IN ('美国', '英国');
    
    # LIKE(% 表示一个或者多个字符,_ 表示一个字符)
    $ SELECT * FROM people WHERE name LIKE ('李%');
    

    关系

    # 栏的名称有冲突的话,写成 数据表.数据栏
    # SELECT 栏1,栏2 FROM 数据表1, 数据表2 WHERE 组织条件
    $ SELECT user_name, review_content FROM user, review WHERE review.user_id = user.user_id;
    
    # 表与表之间, 表示CROSS JOIN:交叉关联  INNER JOIN:内部关联
    $ SELECT user_name, review_content FROM user INNER JOIN review ON review.user_id = user.user_id;
    
    # INNER JOIN(交集) 后继续设置条件
    $ SELECT user_name, review_content FROM user INNER JOIN review ON review.user_id = user.user_id WHERE user.user_id = 1;
    
    # LEFT JOIN:左关联 RIGHT JOIN:右关联
    # 以哪个为主显示所有内容 次表有就关联显示 没有就null
    $ SELECT user_name, review_content FROM user LEFT JOIN review ON review.user_id = user.user_id;
    
    # COUNT()函数统计此栏的 数量 
    $ SELECT COUNT(review_id) FROM review;
    
    # GROUP BY: 通过某个栏分组 
    $ SELECT film_id, COUNT((review_id) FROM review GROUP BY film_id;
    
    # AVG()函数计算平均分
    $ SELECT film_id, AVG(review_rate) FROM review GROUP BY film_id;
    
    # SUM()函数求和
    

    一些查询例子

    # 查询电影平均分
    $ SELECT review.film_id, film.film_name, AVG(review_rate) FROM review, film WHERE review.film_id = film.film_id GROUP BY review.film_id;
    
    # 查询电影名与参与电影人和工作
    $ SELECT film_name, people_name, job FROM film, people, film_people WHERE film_people.film_id = film.film_id AND film_people.people_id = people.people_id;
    
    # 查询电影名为x的参与电影人和工作 on duplicate key 当被约束时更新xxxxx
    $ SELECT film_name, people_name, job FROM film, people, film_people WHERE film_people.film_id = film.film_id AND film_people.people_id = people.people_id AND film_name = 'x' on duplicate key update xxxxxx;
    
    # 查询电影票房按导演名分组 按票房降序排序 
    # AS 可以给数据栏和数据表起别名
    $ SELECT SUM(film_box) AS total_box, people_name FROM film, people, crew WHERE crew.film_id = film.film_id AND crew.people_id = people.people_id AND crew_job = '导演' GROUP BY people_name ORDER BY total_box DESC;
    

    相关文章

      网友评论

          本文标题:mysql学习

          本文链接:https://www.haomeiwen.com/subject/urlzixtx.html