数据库之基本命令和注意点
1 // 创建数据库 2 create database 数据库名字; 3 // 创建数据库并指定字符集 4 create database 数据库名字 character set 字符集; 5 // 创建数据库并指定字符集并指定校对规则//校对规则中会认为两个不同字符等价,如A和a一样大,两个不同特殊字符一样大 6 create database 数据库名字 character set 字符集 collate 校对规则; 7 // 查看所有创建的数据库 8 show databases; 9 // 查看已经创建的数据库的定义 10 show create database 数据库名字; 11 // 修改数据库的字符集 12 alter database 数据库名字 character set 字符集; 13 // 删除数据库 14 drop database 数据库名字; 15 // 切换数据库 16 use 数据库名字; 17 //查看一下当前正在使用的数据库 18 select database();//使用一个函数 19 //创建表 20 create table 表名( 21 列名 列的类型(长度) 约束, 22 ... 23 ); 24 //列的类型注意 25 char(3)//肯定占用3个字节,没有补空格 26 varchar(3)//占用空间可以小于3个字节 27 date:YYYY-MM-DD 28 time:hh:mm:ss 29 datetime:YYYY-MM-DD hh:mm:ss//默认使用null 30 timestamp:YYYY-MM-DD hh:mm:ss//默认使用当前时间 31 text//用来存放文本 32 blob//用来存放二进制 33 34 //列的约束 35 主键约束:primary key 36 唯一约束:unique 37 非空约束:not null 38 39 // 查看表 40 show tables; 41 // 查看表的定义语句 42 show create table 表名; 43 //查看表的结构 44 desc 表名 45 46 //修改表--------------------------------- 47 alter table 表名 add 列名 列的类型 列的约束;//添加列 48 alter table 表名 modify 列名 修改信息;//修改列的信息 49 alter table 表名 change 列名 新列名 列的信息;//修改列名 50 alter table 表名 drop 列名;//删除列 51 alter table 表名 character set 字符集;//修改表的字符集 52 rename table 表名 to 新表名;//修改表名 53 drop table 表名;//删除表 54 55 56 //增删改查-------------------- 57 insert into 表名(列名1,列名2) values(值1,值2),(),();//插入数据 58 insert into values(值1,值2),(),();//在插入全列的值时可以简写 59 delete from 表名 where 条件//删除数据,不加条件全部删除 60 --说明delete删除数据和truncate删除数据的差别 61 delete:DML一条一条删除数据 62 truncate:DDL先删除表再重建表 63 -哪一个执行效率高 64 如果数据量比较少:delete比较高效 65 如果数据量比较大:truncate比较高效 66 67 update 表名 set 列名1=列的值,列名2=列的值 where 条件//更新表中的数据 68 //列的值,字符串和日期加引号(单或双),数字不用 69 70 select [distinct][*][列名1,列名2] from 表名 [where 条件]//distinct:去除重复数据 71 select 列名1 as 别名1,列名2 as 别名2 from 表名;//将查出来的列另起名字,易于理解 72 73 where后面的关系运算符: 74 <>:不等于:标准sql语法 75 !=:不等于:非标准sql语法 76 两个条件用and,or,not连接 77 定义区间用between...and... 78 79 like模糊查询(where name like '%tao%') 80 _代表一个字符 81 %代表多个字符 82 83 in在某个范围内查找值(where age in (20,21,23)) 84 排序查询(where order by price asc/desc) 85 ------------------------------------------------------------- 86 87 show variables names like 'char%'; 88 character_set_client:主要用来设置客户端使用的字符集。 89 character_set_connection:主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。 90 character_set_results:数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。 91 character_set_server: mysql安装时指定的默认字符集. 92 character_set_database: mysql中某个数据库使用的字符集,如果创建库时没有指明字符集,将使用character_set_server的值默认设置。 93 94 95 --------------------------------------------------------- 96 //聚合函数 97 sum() 98 avg() 99 count() 100 max() 101 min() 102 select sum(price) from 表名;//其他类似 103 --注意where后面不能含有聚合函数 104 select * from product where price >avg(price); 105 //子查询(查询所有大于平均价格的商品) 106 select * from product where price >(select avg(price) from product); 107 108 //分组group by 109 1.根据type字段分组,分组后统计商品的个数 110 select type,count(*) from product group by type; 111 2.根据type分组,分组统计每组商品平均价格,并且商品平均价格>60 112 select type,avg(price) from product group by type having avg(price)>60(应该是既然分组了,所有函数作用在一组里) 113 114 1.having 关键字,后面可以接聚合函数,要在分组之后 115 2.where 关键字,后面不可以接聚合函数,要在分组之前 116 117 //为表添加外键约束 118 alter table 现在表名 add foreign key(外键名) references 关联表(关联表主键); 119 foreign key(外键名) references 关联表(关联表主键)//在create table时添加用这句 120 //如果表中有外键的值在关联表中没有,则这句话会添加失败 121 //如果关联完成后,插入外键的值再关联表中不存在,则插入失败 122 123 //若现在表使用外键约束关联关联表 124 如果想删除关联表中的一项,要先删除现在表中关联该项的记录 125 126 127 128 129 130 131 132 //建表原则 133 一对多:(一条记录对应多条记录:分类和商品) 134 建表原则:在多的一方添加一个外键,指向‘一’的一方的主键 135 136 多对多:(学生和课程:一个学生对应多个课程,一个课程对应多个学生) 137 建表原则:另外建一张连接表,有自己id,两个外键id 138 连接表和学生是:一个学生对应多个连接表记录,一个连接表记录对应一个学生(即1对多) 139 连接表和课程是:一个课程对应多个连接表记录,一个连接表记录对应一个课程(即1对多) 140 141 一对一:(公民和身份证) 142 建表原则:随便一张表中加入另一个表的外键 143 或者直接合并 144 或者两张表对应主键一样,可以使用同样数值查询 145 146 //主键约束(primary key)和唯一约束(unique)的区别 147 主键约束:唯一,不能为空 148 主键一张表只有一个 149 外键都是指向另一张表的主键 150 唯一约束:唯一,可以为空 151 唯一约束一张表可以给很多属性 152 唯一约束不可以作为其他表的外键 153 154 155 //隐式内链接和显示内链接 156 select * from recordOne,recordTwo;//这是两个表的乘积,记录个数是两个表的个数的乘积(笛卡尔积) 157 158 --隐式内链接: 159 select * from recordOne as r1,recordTwo as r2 where r1.外键=r2.tid;//as可省略 160 select * from recordOne r1,recordTwo r2 where r1.外键=r2.tid; 161 --显示内链接 162 select * from recordOne r1 inner join recordTwo r2 on r1.外键=r2.tid; 163 //两种内链接的区别 164 --隐式内链接:在查询结果(乘积)的基础上,去做where条件过滤 165 --显示内链接:带着条件去查询结果,执行效率高 166 167 168 --左外连接: 169 select * from recordOne r1 left outer join recordTwo r2 on r1.外键=tid; 170 查询结果是左表内容肯定有,右表中如果没有对应数据,用NULL代替(左表外键为null,或者通过客户端软件插入的外键另一个表中没有--通过命令不会有这种情况) 171 --右外连接: 172 select * from recordOne r1 right outer join recordTwo r2 on r1.外键=tid; 173 查询结果是右表内容肯定有,如果左边没有对应内容,用NULL代替 174 //前面所有的inner和outer都可以省略 175 176 //分页查询 177 select *from 表 limit 0,3//第一次 178 select *from 表 limit 3,3//第二次 179 //第一个参数是开始索引,第二个是个数 180 startIndex=(页数-1)*3