0%

数据库大作业笔记(一)

mysql的外键约束

InnoDB拒绝任何试着在子表创建一个外键值而不匹配在父表中的候选键值的INSERT或UPDATE操作(InnoDB是MySQL的数据库引擎之一)。有五种外键约束:

  • cascade:从父表中删除或更新,且自动删除或更新自表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE
  • set null:从父表删除或更新行,并设置子表中的外键列为NULL。ON DELETE SET NULL和ON UPDATE SET NULL
  • no action: InnoDB拒绝对父表的删除或更新操作。
  • restrict(默认值):拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。
  • set default:InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT

在yii框架生成的表单中,若对子表中外键属性进行插入时,输入空值,点保存会报错,修改方法为:

在model中重写yii\base\Model::rule()方法,设置外键属性栏为必填(required):

1
2
3
4
5
6
7
8
9
10
public function rules()
{
return [
// name,email,subject 和 body 特性是 `require`(必填)的
[['name', 'email', 'subject', 'body'], 'required'],

// email 特性必须是一个有效的 email 地址
['email', 'email'],
];
}
输入固定长度的字符串

起因是,我就想让学号是7位的,但是在数据库设成char(7),然后输入长度小于7的,它就自动在后面补空格了,所以还是要从yii框架这边的输入规则下手,和上面的操作一样,增加min规则:

1
[['prsid'], 'string', 'max' => 7,'min'=> 7]

min_string

yii框架创建下拉列表
1
2
3
4
5
6
7
8
/* @var $form yii\widgets\ActiveForm */

echo $form->field($model, 'category')->dropdownList([
1 => 'item 1',
2 => 'item 2'
],
['prompt'=>'Select Category']
);

但是我现在觉得,我需要的“性别”那一栏,单选列表更合适喔,所以:

yii框架创建单选列表
1
2
3
4
5
6
/* @var $form yii\widgets\ActiveForm */

echo $form->field($model, 'category')->radioList([
1 => 'radio 1',
2 => 'radio 2'
]);

前面是需要存入数据库的字段,后面是显示的文字,具体地:

1
2
3
4
5
6
7
8
9
<?= $form->field($model, 'sex')->radioList(['m'=>'男','f'=>'女']) ?>

<?= $form->field($model, 'ptype')->radioList([1=>'学生',2=>'教职工']) ?>

<?= $form->field($model, 'degree')->dropdownList([
'本科生' => '本科生',
'硕士' => '硕士',
'博士' => '博士',
]); ?>

1557199635204

index页面明明是有的,怎么就404了?!!