wshq 发表于 2018-10-9 07:35:35

mysql(一)

  主要是一些sql语句,实现了就好
  会在后边上产一个附件,里边是一些数据库知识和和一些spl语句
  下边把来实现一下一些语句。
  -- 写sql语句,发送给服务端执行
  -- 在后面可以写注释
  -- 创建库,day16
  CREATE DATABASE day16 DEFAULT CHARACTER SET utf8;
  -- 使用day16这个数据库
  USE day16;
  -- 查询day16这个库中的所有的表
  SHOW TABLES;
  -- 需求:创建学生表(id,name,age)
  CREATE TABLE student(
  -- 字段名称 字段类型
  id INT,
  NAME VARCHAR(20),
  age INT
  );
  -- 查询表中的数据
  SELECT * FROM student;
  -- 查询一个表结构
  DESC student;
  -- 删除student表
  DROP TABLE student;
  -- 添加一个地址字段(gender varchar(2))
  ALTER TABLE student ADD COLUMN gender VARCHAR(2);
  -- 修改gender字段类型为varchar(3)
  ALTER TABLE student MODIFY COLUMN gender VARCHAR(3);
  -- 将gender字段修改为sex字段 varchar(2)
  ALTER TABLE student CHANGE COLUMN gender sex VARCHAR(2);
  -- 添加一个地址字段
  ALTER TABLE student ADD COLUMN address VARCHAR(20);
  -- 删除sex和address字段
  ALTER TABLE student DROP COLUMN sex,DROP COLUMN address;
  -- 将student这个表的表名改为stu
  ALTER TABLE stu RENAME TO student;
  -- 查看表的数据
  -- select 字段名称(如果查询所有字段*) from student;
  -- 查看表数据
  SELECT * FROM student;
  -- 给表中插入3条数据(插入所有字段)
  INSERT INTO student VALUES(1,'刘德华',50,'中国香港');
  INSERT INTO student VALUES(2,'陈奕迅',40,'中国香港');
  INSERT INTO student VALUES(3,'韩红',50,'河北');
  -- 当需要插入所有字段的时候我们可以直插入部分字段吗?插入不了
  INSERT INTO student VALUES(1,'成龙',60,'中国香港');
  -- 指向给表中只想插入id字段和name字段,请问怎么办?
  INSERT INTO student(id,NAME) VALUES(4,'郭德纲');
  -- 将所有学生的年龄改为50岁,修改所有学生的年龄,用的非常少
  UPDATE student SET age=50;
  -- 将id为3的学生姓名改为房祖名

  UPDATE student SET NAME='房祖名' WHERE>  -- 修改多个字段,修改id为2的学生姓名为张学友,年龄改为60

  UPDATE student SET NAME='张学友',age=60 WHERE>  -- 删除全表数据,本质上是一条一条进行删除的,效率比较慢
  DELETE FROM student;
  -- 删除id为3的数据

  DELETE FROM student WHERE>  -- 使用truncate table 表名,删除全表数据,并不是一条条删,而是直接将全表数据删除,效率比较快
  TRUNCATE TABLE student;
  -- delete from和truncate table 这两种删除全表的方式有什么区别呢?
  -- 1.delete from一条条删除,truncate table直接将全表数据干掉
  -- 2.delete from可以按条件删除一条数据,truncate table只能删除全表数据,不能按照条件删除
  -- 3.delete from无法重置自增长主键,truncate table可以重置自增长主键
  -- 查询数据
  -- 查询所有列
  SELECT * FROM student;
  -- 查询指定字段,查询id,name

  SELECT>  -- 查询时指定别名,name--姓名,address--住址
  SELECT NAME AS '姓名',address AS '住址' FROM student;
  -- 上面指定别名的as是可以省略的
  SELECT NAME '姓名' FROM student;
  -- 添加servlet,jsp字段
  ALTER TABLE student ADD COLUMN servlet INT,ADD COLUMN jsp INT;
  -- 给每条学生数据添加上servlet和jsp的成绩

  UPDATE student SET servlet=50,jsp=60 WHERE>
  UPDATE student SET servlet=60,jsp=70 WHERE>
  UPDATE student SET servlet=70,jsp=80 WHERE>  -- 合并servlet和jsp这两个列进行查询,查询每个学生的servlet和jsp的成绩总和
  -- 合并列查询有一个特点:只能合并数值类型的字段
  SELECT NAME '姓名',(servlet+jsp) '总成绩' FROM student;
  -- 查询时添加常量列,给student表添加一个常量列班级--java001
  SELECT NAME '姓名',address '地址','java001' AS '班级' FROM student;
  -- 查询你们班的学生都来自于哪里
  SELECT NAME '姓名',address '地址' FROM student;
  -- 去除重复值来查询每一个学生来自于哪里
  SELECT DISTINCT address FROM student;
  -- 去除重复值的另一种写法
  SELECT DISTINCT(address) FROM student;
  -- 查询id为1并且,并且servlet成绩等于50的学生(交集 and)

  SELECT * FROM student WHERE>  -- 查询id为1或者来自中国香港的学生(并集 or)

  SELECT * FROM student WHERE>  -- 查询servlet成绩大于60分的学生
  SELECT * FROM student WHERE servlet>60;
  -- 查询jsp成绩小于等于70的学生
  SELECT * FROM student WHERE jsp  -- 按照servlet的成绩的降序进行排序
  SELECT * FROM student ORDER BY servlet DESC;
  -- 当有多个排序条件的时候,先按照第一个条件排序,如果第一个条件相同则按照第二个条件进行排序
  -- 先按照学生的年龄升序进行排序,年龄相同按照学生的servelt成绩的升序进行排序
  SELECT * FROM student ORDER BY age ASC,servlet ASC;
  DESC student;
  SELECT * FROM student;
  -- ------------------------------------------------------------------
  -- 数据约束 :给表添加一些数据约束从而可以达到约束用户操作数据的效果
  -- 1:默认值约束(default)
  -- :当给这个字段没有添加值的时候,会给一个默认值,如果给默认值约束的字段添加的值为null的时候,那么他的字段值就为null
  -- 创建一个stu表
  CREATE TABLE stu(
  id INT,
  NAME VARCHAR(20),
  -- 给性别gender这个字段添加一个默认值约束
  gender VARCHAR(2) DEFAULT '男'
  );
  -- 给stu表中添加几个数据
  INSERT INTO stu VALUES(1,'张三','男');
  INSERT INTO stu(id,NAME) VALUES(2,'李四');
  -- 给stu表中插入数据,性别为null
  INSERT INTO stu VALUES(3,'刘诗诗',NULL);
  -- 2.非空约束(not null),插入的字段不为null,而且必须插入数据
  CREATE TABLE stu(
  -- 给stu表中的id字段添加一个非空约束
  id INT NOT NULL,
  NAME VARCHAR(20),
  gender VARCHAR(2)
  );
  -- 给这张表中添加一个元素,不插入id字段的值
  INSERT INTO stu(NAME,gender) VALUES('郭德纲','男');
  -- 给这张表添加一条数据,id字段的值直接给成null,这样的话是插入不进去的。。
  -- 唯一约束(unique)
  -- 给stu表添加一个唯一约束
  CREATE TABLE stu(
  -- 给stu表中的id字段添加唯一约束
  id INT UNIQUE,
  NAME VARCHAR(20),
  gender VARCHAR(2)
  );
  -- 给表中插入两条id相同的数据
  INSERT INTO stu VALUES(1,'刘德华','男');
  INSERT INTO stu VALUES(1,'张学友','男');-- Duplicate entry '1' for key 'id',无法插入重复的id值
  -- 给表中插入一条id为null的数据,当给id添加了唯一约束之后,依然可以给他插入多条null值,不会出现重复
  INSERT INTO stu VALUES(NULL,'吴奇隆','男');
  INSERT INTO stu VALUES(NULL,'刘诗诗','女');
  -- 经过我们的分析,我们认定我们的这个id字段(唯一+非空)--主键(primary key)
  -- 注意:
  -- 1.一般来说我们需要给每一张表都设定一个主键字段(非空+唯一),用来标示一条信息的唯一性
  -- 2.我们一般不会将业务字段设定为主键字段,比如name字段,一般我们会给每一张表添加一个id字段作为主键字段
  -- 3.建议给每张表添加一个主键字段,用来标示每一条数据的唯一性
  CREATE TABLE stu(
  -- 给stu表中的id字段设置为主键(唯一+非空)
  id INT PRIMARY KEY,
  NAME VARCHAR(20),
  gender VARCHAR(2)
  );
  -- 给表中插入两条id为1的学生信息
  INSERT INTO stu VALUES(1,'华仔','男');
  INSERT INTO stu VALUES(1,'华建','男');-- Duplicate entry '1' for key 'PRIMARY'
  -- 给表中插入id为null的元素
  INSERT INTO stu VALUES(NULL,'杰伦','男');-- Column 'id' cannot be null
  -- 上面的实验我们可以得出结论,当我们给id字段设置了主键约束后,这个id字段就非空+唯一了
  -- 自增长约束(auto_increment)
  -- 给stu表中的id字段添加一个主键自增长约束
  CREATE TABLE stu(
  -- 给stu表中的id字段设置主键自增长约束,我们其实就将id这个字段交给了数据库自己去维护,我们自己不需要去动他
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(20),
  gender VARCHAR(2)
  );
  -- 给stu表中添加两条数据
  INSERT INTO stu(NAME,gender) VALUES('华仔','男');
  INSERT INTO stu(NAME,gender) VALUES('周杰伦','男');
  INSERT INTO stu(NAME,gender) VALUES('周杰伦','男');
  INSERT INTO stu(NAME,gender) VALUES('周杰伦','男');
  -- 删除id为4的数据

  DELETE FROM stu WHERE>  -- 给表中添加一条数据
  INSERT INTO stu(NAME,gender) VALUES('张学友','男');
  -- delete from 这种删除数据的方式,无法重置自增长的主键
  -- 删除stu的全表数据
  DELETE FROM stu;
  -- 添加一条数据
  INSERT INTO stu(NAME,gender) VALUES('张学友','男');
  -- 删除全表数据的truncate table 表名 ,删除全表数据,这种删除全表数据的方式可以重置主键
  TRUNCATE TABLE stu;
  -- 给表中添加一条数据
  INSERT INTO stu(NAME,gender) VALUES('华仔','男');
  SELECT * FROM stu;
  DROP TABLE stu;

页: [1]
查看完整版本: mysql(一)